読者です 読者をやめる 読者になる 読者になる

kitak.blog

Kみたいなエンジニアになりたいブログ

さめがめをPygameで作る

お前、最近本ばっかり読んでてプログラミングしてないんじゃないの?とか、そろそろ周りから突っ込まれそうな気がしたので、さめがめを適当にPythonで作りました。
理由としてはクラスで、さめがめ作るのが流行ってるから(ようするにただの負けず嫌い)。
Javaで作った人がいるのを皮切りに、.net(VBC#かどっちか)で作った人も。.netの人は授業中にサボって2時間ぐらいで作ったらしいけど、こっちはのんびり電気回路の宿題やりながら一日かけてやりました。
f:id:kitak:20090721220308j:image
以下、突っ込みどころ満載な雑なソースです。boardモジュールがミソなのですが、あまりにソースが汚いので、リファクタして、後日載せます。

# -*- coding:utf-8 -*-
import sys
import pygame
from pygame.locals import *
from board import *

NUM_COL = 20
NUM_ROW = 15
SIZE = 30
SCREEN_SIZE = (NUM_COL*SIZE,NUM_ROW*SIZE)

WHITE = (255, 255, 255)
RED = (241, 91, 91)
BRUE = (0, 125, 197)
GREEN = (0, 128, 0)
YELLOW = (255, 212, 0)
COLOR = [WHITE, RED, BRUE, GREEN, YELLOW]

def main():
    pygame.init()
    screen = pygame.display.set_mode(SCREEN_SIZE)
    pygame.display.set_caption(u"さめがめ")

    sg = SameGameBoard(NUM_COL, NUM_ROW, len(COLOR))

    while True:
        draw_board(screen, sg.content)
        pygame.display.update()
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == MOUSEBUTTONDOWN and event.button == 1:
                px, py = event.pos
                sg.update_board(px/SIZE, py/SIZE)

def draw_board(screen, board):
    pygame.draw.rect(screen, (50,50,50),
                     Rect(0, 0, SCREEN_SIZE[0], SCREEN_SIZE[1]))
    for i in xrange(NUM_ROW):
        offset = i * NUM_COL
        for j in xrange(NUM_COL):
            if board[offset+j] > 0:
                pygame.draw.rect(screen, COLOR[board[offset+j]-1],
                                 Rect(j*SIZE,i*SIZE,SIZE,SIZE))
                pygame.draw.rect(screen, (50,50,50),
                                 Rect(j*SIZE,i*SIZE,SIZE,SIZE), 1) # grid

if __name__=='__main__':
    main()