初学者です。(簡単な本2冊程度です。Pythonのみ)
pythonで作るゲーム作成に関する本を勉強したので、自分でも作りたいと思い、簡単なゲームを作っています。
ゲームについて
世界一難しいゲームというブラウザゲームがあります。
それと同じものを作成することを目標としています。
(参考:https://www.youtube.com/watch?v=bhqkxwJWR0w)
作成できた部分
ステージと操作する黄色丸の描画と操作
困っていること
黄丸を操作した時、黒い線を越えてしまうので衝突判定を実装し、移動をステージ内のみにできるようにしたい。
勉強した本にも衝突判定について載っておらず困っています。
調べても、私の作成しているプログラムとは書き方が違ったりしていて、参考にしづらいです。
どなたかアイディアいただけませんか。
ちなみにステージを管理するstage_pyは、stageという変数の3次元リストのみです。その中で20×16のリストを作成して、0(何もなし),1(壁),2(スタート地点),3(ゴール地点)のように作っています。
コード
import pygame import sys import stage_type as st #自作モジュール BLACK = (0, 0 ,0) WHITE = (255, 255, 255) YELLOW = (255, 215, 0) play_stage = 2#プレイ中のステージを管理する変数 dot_x = 0 #操作する黄丸のx座標 dot_y = 0 #操作する黄丸のy座標 def stage_paint(sc): #ステージを描画する関数 global play_stage for y in range(len(st.stage[play_stage])): for x in range(len(st.stage[play_stage][0])): if st.stage[play_stage][y][x] == 1 and st.stage[play_stage][y][x+1] == 1: pygame.draw.line(sc, BLACK,[x*50+25,y*50+25], [x*50+75,y*50+25],5) if st.stage[play_stage][y][x] == 1 and st.stage[play_stage][y+1][x] == 1: pygame.draw.line(sc, BLACK,[x*50+25,y*50+25], [x*50+25,y*50+75],5) def move_dot():#黄丸を動かす関数 global dot_x,dot_y key = pygame.key.get_pressed() if key[pygame.K_UP] == 1: dot_y = dot_y - 2.5 if key[pygame.K_DOWN] == 1: dot_y = dot_y + 2.5 if key[pygame.K_RIGHT] == 1: dot_x = dot_x + 2.5 if key[pygame.K_LEFT] == 1: dot_x = dot_x - 2.5 def set_dot():#黄丸を初期位置にセットする関数 global dot_x,dot_y for y in range(len(st.stage[play_stage])): for x in range(len(st.stage[play_stage][0])): if st.stage[play_stage][y][x] == 2: dot_x = x * 50 + 25 dot_y = y * 50 + 25 def draw_dot(sc,x,y):#黄丸を描画する関数 pygame.draw.circle(sc, BLACK,[x,y],17) pygame.draw.circle(sc, YELLOW,[x,y],13) def main(): global dot_x,dot_y pygame.init() pygame.display.set_caption("ステージ作成") screen = pygame.display.set_mode((1000,800)) clock = pygame.time.Clock() set_dot() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() screen.fill(WHITE) stage_paint(screen) move_dot() draw_dot(screen,dot_x,dot_y) pygame.display.update() clock.tick(120) if __name__ == '__main__': main()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。