pygame によって作成された「Snake」ミニゲーム:
「Snake-eating Snake」ミニゲームが使用されています
シンプル、最も基本的なゲーム要素に必要なのは 2 匹のヘビと食べ物だけです。 (オナニーにはあと 3 つの要素が必要です。それが何であるか考えてみましょう。) 方向に関しては、上下左右の 4 つの固定方向だけが必要です。 そこには基本的なデータ構造とオブジェクト指向の考え方が含まれています。ゲーム開発自体はオブジェクト指向の概念を多く使用しており、ヘビの体は自然な「リンク リスト」構造であり、データ構造の練習に非常に適しています。もう一つ興味深いのは、Pythonという言葉は英語でニシキヘビを意味し、Snakeは「同名のゲーム」とみなすことができるということです。多くの学校では、ヘビに関するトピックを含むプログラム開発コースの課題があり、生徒は関連するコードについてよく質問します。 (Nokia の携帯電話もこのゲームに強いスポットを持っています。) 私は以前、cocos2d-python に基づいて開発された「Snake Fight」の Python バージョンを作成しました。しかし、それは初心者にとっては少し複雑です。
ここで簡単に説明します:
このコードは pygame に基づいて開発されているため、実行する前に pygame が Python に正常にインストールされていることを確認してください。次に、コード内で直接 game2.py を実行してゲームを開始します。最終的なコードに加えて、独自のコードを開発したい学生が参照できるように、プロセス中にいくつかの py ファイルを特別に分解しました。
まず、このゲームを書くときにどのような点に注意する必要があるかを分析してみましょう。
1. 蛇は何を表しているのでしょうか?
ゲームエリア全体を小さなグリッドに分割し、接続された小さなグリッドのグループが「蛇」を形成します。上の図のように、さまざまな色を使用してそれを表現できます。背景には暗い色を使用し、「蛇」には明るい色を使用しました。
座標を使用してそれぞれの小さな正方形を表すことができ、X 軸と Y 軸の範囲を設定できます。 「ヘビ本体」の座標をリストに登録しておくと「ヘビ」が出てきて、最後に色を変えて表示するだけです。
2. ヘビはどのように動くのでしょうか?
最初の反応は、小さな正方形をミミズのように前方に移動させることですが、これを実装するのは非常に面倒です。最初からここで行き詰まってしまいました。
私たちが演じた貪欲な蛇を想像してください。「蛇」が動くたびに、体全体が前に進んだように感じます。頭の中で「蛇」の「動き」を排除し、その前後をよく考えてください。移動後は「蛇」の位置が変わっていますが、実は頭と尻尾以外は全く変わっていません。それは簡単です。次のグリッドの座標をリストの先頭に追加し、リストの最後の要素を削除します。これは、ヘビが 1 グリッド前に進むのと同じです。
3. ゲームの終了をどのように判断するか?
「スネーク」がゲームエリアの範囲外に移動したり、自身に触れたりすると失われますが、軸座標の範囲はあらかじめ決められており、それを超えているかどうかの判断は容易です。範囲。では、自分自身に出会ったとき、どうやって判断するのでしょうか?
頭の中で動く「ヘビ」の絵を考えている場合、それは非常に難しいですが、コードでは「ヘビ」はリストなので、次の「ヘビ」の座標がグリッドはすでにリストに含まれています 「ヘビ」はリストに含まれませんか?
これらの問題を明確にしたら、コーディングを開始できます。
ゲーム要素とインターフェイスの定義:
def main(): pygame.init() screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) pygame.display.set_caption('贪吃蛇') light = (100, 100, 100) # 蛇的颜色 dark = (200, 200, 200) # 食物颜色 font1 = pygame.font.SysFont('SimHei', 24) # 得分的字体 font2 = pygame.font.Font(None, 72) # GAME OVER 的字体 red = (200, 30, 30) # GAME OVER 的字体颜色 fwidth, fheight = font2.size('GAME OVER') line_width = 1 # 网格线宽度 black = (0, 0, 0) # 网格线颜色 bgcolor = (40, 40, 60) # 背景色 # 方向,起始向右 pos_x = 1 pos_y = 0 # 如果蛇正在向右移动,那么快速点击向下向左,由于程序刷新没那么快,向下事件会被向左覆盖掉,导致蛇后退,直接GAME OVER # b 变量就是用于防止这种情况的发生 b = True # 范围 scope_x = (0, SCREEN_WIDTH // SIZE - 1) scope_y = (2, SCREEN_HEIGHT // SIZE - 1) # 蛇 snake = deque() # 食物 food_x = 0 food_y = 0
ヘビと食べ物の初期化:
# 初始化蛇 def _init_snake(): nonlocal snake snake.clear() snake.append((2, scope_y[0])) snake.append((1, scope_y[0])) snake.append((0, scope_y[0])) # 食物 def _create_food(): nonlocal food_x, food_y food_x = random.randint(scope_x[0], scope_x[1]) food_y = random.randint(scope_y[0], scope_y[1]) while (food_x, food_y) in snake: # 为了防止食物出到蛇身上 food_x = random.randint(scope_x[0], scope_x[1]) food_y = random.randint(scope_y[0], scope_y[1]) _init_snake() _create_food()
すべてのコード:
そうです以上がPython を使用して簡単なヘビ ゲームを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。