トップページプログラミングCocos2d サンプルプログラム

Cocos2d サンプルプログラム

Cocos2d は2次元ゲームのフレームワーク.Python で動く.

このWebページでは、サンプルプログラムを掲載する

関連する資料:Cocos2d の概要 [PDF], [パワーポイント]

関連する資料:ゲームエンジン[PDF], [パワーポイント]

参考Webページ: http://python.cocos2d.org/doc.html

参考Webページ: http://docplayer.net/62131747-Python-game-programming-by-example.html

謝辞

Cocos2d の作者に感謝します.

前準備

cocos2d, pyglet のインストール

サンプルプログラムと実行手順例

  1. Python プログラムを動かす.

    Python プログラムを動かすために, Windows では「python」, Ubuntu では「python3」などのコマンドを使う.

    あるいは, 開発環境や Python コンソール(Jupyter Qt ConsolespyderPyCharmPyScripter など)の利用も便利である.

    あるいは,オンラインで動くGoogle Colaboratory のノートブックの利用も,場合によっては便利である.

    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() ) )
    

    [image]

    [image]
  2. 結果を確認したら,右上の「x」をクリックして終了.