Cocos2d サンプルプログラム
Cocos2d は2次元ゲームのフレームワーク.Python で動く.
このWebページでは、サンプルプログラムを掲載する
関連する資料:Cocos2d の概要 [PDF], [パワーポイント]
関連する資料:ゲームエンジン[PDF], [パワーポイント]
【関連する外部ページ】 https://www.cocos.com/endoc.html
【関連する外部ページ】 http://docplayer.net/62131747-Python-game-programming-by-example.html
謝辞
Cocos2d の作者に感謝します.
前準備
Python のインストール,pip と setuptools の更新,Python 開発環境のインストール
手順は,別ページ »で説明
インストールを行わず,Google Colaboratory を利用することもありえる. Google Colaboratory の使い方などは, 別ページ »で説明
cocos2d, pyglet のインストール
サンプルプログラムと実行手順例
- Python プログラムの実行
Python プログラムの実行
- Windows では python (Python ランチャーは py)
- Ubuntu では python3
【サイト内の関連ページ】 Python のまとめ: 別ページ »
import random import cocos from cocos import scene from cocos.layer import Layer, ColorLayer from cocos.director import director import pyglet from pyglet.window import key from time import sleep class MyActor(cocos.text.Label): def __init__(self, text, x, y, vx, vy, size, rgba): super(MyActor, self).__init__( text, font_name = "Times New Roman", font_size = size, anchor_x = 'center', anchor_y = 'center', color = rgba ) self.vx = vx self.vy = vy self.position = cocos.euclid.Vector2(x, y) self.type="MyActor" class Player(cocos.text.Label): def __init__(self, text, x, y, size, rgba): super(Player, self).__init__( text, font_name = "Times New Roman", font_size = size, anchor_x = 'center', anchor_y = 'center', color = rgba ) self.position = cocos.euclid.Vector2(x, y) self.type="Player" class Layer00(Layer): is_event_handler = True def __init__(self): super(Layer00, self).__init__() # random.seed() self.kao = MyActor("?", 320, 240, -150, -150, 40, (255, 255, 255, 255)) self.add( self.kao ) self.balls = [] for i in range(1, 4): for j in range(1, 11): self.balls.append( MyActor("□", 50 * j + 50, 480 - (47 * i), 0, 0, 70, (255, 255, 255, 255)) ) self.add(self.balls[(j-1)+((i-1)*10)]) self.player = Player("ー", 200, 80, 100, (120, 200, 255, 255)) self.add(self.player) self.schedule(self.update) def update(self, dt): for _, node in self.children: if ( type(node) == MyActor ): node.x += node.vx * dt node.y += node.vy * dt a = "" if ( node.x >= 640-15 and a != "right"): node.vx = -node.vx a = "right" if ( node.x < 0+15 and a != "left"): node.vx = -node.vx a = "left" if ( node.y >= 480-8 and a != "up"): node.vy = -node.vy a = "up" if ( node.y < 0+22 and a != "down"): node.vy = -node.vy a = "down" director.replace(scene.Scene(Layer01())) if ( ( ( self.player.x - 50 ) < node.x ) and ( node.x < ( self.player.x + 50 ) ) and ( ( self.player.y - 10 ) < node.y ) and ( node.y < ( self.player.y + 25 ) ) ): node.vy = - node.vy for z in range(0, len(self.balls)): a = 22 b = 22 c = 20 # if self.balls[z] != None: if ( self.balls[z].x - b < ( self.kao.x + a) ) and ( ( self.kao.x + a ) < self.balls[z].x + b and self.balls[z].y - c < ( self.kao.y ) ) and ( ( self.kao.y ) < self.balls[z].y + c): self.kao.vx = - self.kao.vx self.remove(self.balls[z]) self.balls.pop(z) return if ( self.balls[z].x - b < ( self.kao.x - a) ) and ( ( self.kao.x - a ) < self.balls[z].x + b and self.balls[z].y - c < ( self.kao.y ) ) and ( ( self.kao.y ) < self.balls[z].y + c): self.kao.vx = - self.kao.vx self.remove(self.balls[z]) self.balls.pop(z) return if ( self.balls[z].x - b < ( self.kao.x ) ) and ( ( self.kao.x ) < self.balls[z].x + b and self.balls[z].y - c < ( self.kao.y + a) ) and ( ( self.kao.y + a) < self.balls[z].y + c): self.kao.vy = - self.kao.vy self.remove(self.balls[z]) self.balls.pop(z) return if ( self.balls[z].x - b < ( self.kao.x ) ) and ( ( self.kao.x ) < self.balls[z].x + b and self.balls[z].y - c < ( self.kao.y - a) ) and ( ( self.kao.y - a) < self.balls[z].y + c): self.kao.vy = - self.kao.vy self.remove(self.balls[z]) self.balls.pop(z) return def on_key_press(self, symbol, modifiers): if symbol == key.RIGHT: self.player.x += 20 elif symbol == key.LEFT: self.player.x -= 20 #elif symbol == key.UP: # self.player.y += 20 #elif symbol == key.DOWN: # self.player.y -= 20 class MyActor2(cocos.text.Label): def __init__(self, text, x, y, size, rgba): super(MyActor2, self).__init__( text, font_name = "Times New Roman", font_size = size, anchor_x = 'center', anchor_y = 'center', color = rgba ) self.position = cocos.euclid.Vector2(x, y) class Layer01(ColorLayer): is_event_handler = True def __init__(self): super(Layer01, self).__init__(231, 76, 60, 1000) self.myactor = MyActor2("GAMEOVER", 400, 240, 32, (0, 200, 255, 255)) self.add(self.myactor) def on_key_press(self, key, modifiers): director.replace(scene.Scene(Layer00())) director.init(width=640, height=480) director.run( scene.Scene( Layer00() ) )
- 結果を確認したら,右上の「x」をクリックして終了.