以下のサイトを参考に,洞窟探索ゲームをつくってみました.
http://www.isc.meiji.ac.jp/~ri03037/ICTappli2/step06.html
実装したコード
こんな書き方でいいのかわからないが,コードを書き出す前に概念の整理.
クラス構成
・船
・洞窟
・得点
・メイン
メソッド構成
船
初期値
表示
爆発
洞窟
初期値
表示
スクロール
衝突判定
得点
初期値
表示
メイン
各クラスをインスタンス化
イベントキュー
自機移動
描画
ゲーム画面更新
●ぼく的難所
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のバージョン情報を保持しているモジュールです。 |
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カ月もたったので,エラーに遭遇,エラーはググりで解決.をやっていこうと思う.脱お手本コピペ初学者.