ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

洞窟探索ゲームをつくってみました.

以下のサイトを参考に,洞窟探索ゲームをつくってみました.

 

http://www.isc.meiji.ac.jp/~ri03037/ICTappli2/step06.html

 

実装したコード

Google Colab

 

こんな書き方でいいのかわからないが,コードを書き出す前に概念の整理.

クラス構成

・船

・洞窟

・得点

・メイン

 

メソッド構成

初期値

表示

爆発

洞窟

初期値

表示

スクロール

衝突判定

得点

初期値

表示

メイン

各クラスをインスタンス

イベントキュー

自機移動

描画

ゲーム画面更新

 

●ぼく的難所

line3

from pygame.locals import QUIT, Rect, KEYDOWN, K_SPACE

内容:pygameライブラリの必要なモジュールをインポート

技術:

pygame.init - インポートした全てのpygameモジュールを初期化します。
pygame.quit - 全てのpygameモジュールの初期化を解除します。
pygame.error - 標準のpygameの例外です。
pygame.get_error - 最新エラーメッセージを取得します。
pygame.set_error - 最新エラーメッセージをセットします。
pygame.get_sdl_version - SDLのバージョンを取得します。
pygame.get_sdl_byteorder - SDLのバイトオーダーを取得します。
pygame.register_quit - pygameを終了する時に実行する関数を登録します。
pygame.version - pygameのバージョン情報を保持しているモジュールです。

pygameのドキュメント

 

Line8

SURFACE = pygame.display.set_mode((800, 600))

内容:tkinterでいうキャンバスを表示する(引数には,キャンバスの大きさを渡す)

技術:pygameの基本的なモジュールdisplay()

 

Iine16

def display_ship(self):
SURFACE.blit(self.image, (0, self.y))

内容:船をキャンバス上に表示

技術:surfaceのblit()モジュール

 

self.slope = randint(1,6)
self.holes = []
for xpos in range(WALLS):
self.holes.appned(Rect(xpos * 10, 100, 10, 400))

Line36-39

内容:

洞窟の初期値を決める

技術:

・傾斜は,1-6%でランダムに設定する

・空洞部分は,空のリストにする

・変数WALLS文,ループで,水平に並んだRECTで初期化(正直,ここはよくわからない)

 

RECTは,pygameライブラリの四角形の描写情報を保持したオブジェクト

活用:pygameのrect()を使って,四角形を表示する

### インポート
import pygame
from pygame.locals import *

### モジュール初期化
pygame.init()

### ベース画面設定
surface = pygame.display.set_mode((640, 400))

### 四角形設定
rect = pygame.Rect(160, 100, 320, 200)

### 四角形色設定
surface.fill((255, 255, 255), rect)

### 画面更新
pygame.display.update(rect)

### 無限ループ
while True:

### イベント処理
for event in pygame.event.get():
if event.type == KEYDOWN and event.key == K_ESCAPE:
break
else:
continue

### whileループ終了
break

### 終了処理
pygame.quit()

 

Line49

edge = self.holes[-1].copy()

内容:スクロールした先の画面を表示

技術:初期値で設定した空のリストの一番後ろのインデックス番号をコピーする

 

Line51

if test.top <= 0 or test.bottom >= 600:
self.slope = randint(1,6) * (-1 if self.slope > 0 else 1)

内容:傾斜を設定

技術:傾きは,ランダムでとった数字(1-6%)と反転した数字

 

Line59

def collision(self, y):
return self.holes[0].top > y.or self.holes[0].bottom < y+80

内容:衝突イベントを発生

技術:引数に変数yをとり,リスト型変数holesのインデックス0番目の値をとって,topとして,yよりも大きいか,bottomよりも80小さい値をとるようにする(解説不明)

 

while True:
is_space_down = False

内容:イベントが発生する条件を定義

技術:何もキーボードが入力されていない初期値を,変数is_space_downがFalseとし,スペースが押された状態を後々Trueとする

 

まとめ

お手本を見ている箇所が,全体の8割強.まだまだお手本なしでは簡単なアプリの実装もできない状態.どう書けばよいか(どんな文法を使えばよいか)は,なんとなく検討がつくのが6割ぐらいになるが,それらをすべて自分でguguることをしていないのが,怠慢だと感じながらも,やはり手元に完成形があるとそちらを参照してしまう.いろんなブログを参考にさせてもらっていて,そのどれにも共通して書いてある「エラーを経験すること.エラーを解消する能力がプログラマーとしての実力」という文言.1カ月もたったので,エラーに遭遇,エラーはググりで解決.をやっていこうと思う.脱お手本コピペ初学者.