0

Tkinterを使用して、主に再生ボタンだけを使用してゲームのメニューを作成するためのサポートが必要です。違いがあれば、私はPygameを使用しています。

from pygame import *
import random
from datetime import datetime

startTime = datetime.now()

class Sprite:
    def __init__(self, xpos, ypos, filename):
        self.x = xpos
        self.y = ypos
        self.bitmap = image.load(filename)
        self.bitmap.set_colorkey((0, 0, 0))
    def set_position(self, xpos, ypos):
        self.x = xpos
        self.y = ypos
    def render(self):
        screen.blit(self.bitmap, (self.x, self.y))

def Intersect(s1_x, s1_y, s2_x, s2_y):
    if (s1_x > s2_x - 32) and (s1_x < s2_x + 32) and (s1_y > s2_y - 32) and (s1_y < s2_y + 32):
            return 1
    else:
        return 0

init()
screen = display.set_mode((640, 480))
key.set_repeat(1, 1)
display.set_caption('PyInvaders')
backdrop = image.load('data/backdrop.bmp')
enemies = []
x = 0

for count in range(10):
    enemies.append(Sprite(50 * x + 50, 50, 'data/enemy.bmp'))
    enemies.append(Sprite(50 * x + 50, 100, 'data/enemy.bmp'))
    x += 1

hero = Sprite(304, 400, 'data/hero.bmp')
ourmissile = Sprite(0, 480, 'data/heromissile.bmp')
enemymissile = Sprite(0, 480, 'data/enemymissile.bmp')
sandwich = Sprite(304, 20, 'data/sandwich.bmp')

quit = 0
score = 0
enemyspeed = 4

while quit == 0:
    screen.blit(backdrop, (0, 0))

    for count in range(len(enemies)):
        enemies[count].x += + enemyspeed
        enemies[count].render()

    if len(enemies) > 0 and enemies[-1].x > 590:
        enemyspeed = -4
        for count in range(len(enemies)):
            enemies[count].y += 5

    if len(enemies) > 0 and enemies[0].x < 10:
        enemyspeed = 4
        for count in range(len(enemies)):
            enemies[count].y += 5

    if ourmissile.y < 479 and ourmissile.y > 0:
        ourmissile.render()
        ourmissile.y -= 5

    if enemymissile.y >= 480 and len(enemies) > 0:
        enemymissile.x = enemies[random.randint(0, len(enemies) - 1)].x
        enemymissile.y = enemies[0].y

    if Intersect(hero.x, hero.y, enemymissile.x, enemymissile.y):
        quit = 1
        print "...where mah sammich."

    for count in range(0, len(enemies)):
        if Intersect(ourmissile.x, ourmissile.y, enemies[count].x, enemies[count].y):
            score += 1
            ourmissile.y = 480
            del enemies[count]
            break

    if Intersect(ourmissile.x, ourmissile.y, enemymissile.x, enemymissile.y):
        ourmissile.y = 480
        enemymissile.y = 480

    if len(enemies) == 0:
        sandwich.y += 2
        if Intersect(hero.x, hero.y, sandwich.x, sandwich.y):
            score += 10
            quit = 1
            print "YEEEEE GOT ME MAH SAMMICH!"

    for ourevent in event.get():
        if ourevent.type == QUIT:
            quit = 1
        if ourevent.type == KEYDOWN:
            if ourevent.key == K_RIGHT and hero.x < 590:
                hero.x += 3
            if ourevent.key == K_LEFT and hero.x > 10:
                hero.x -= 3
            if ourevent.key == K_SPACE:
                ourmissile.x = hero.x
                ourmissile.y = hero.y

    enemymissile.render()
    enemymissile.y += 5
    hero.render()
    sandwich.render()
    display.update()

print "You scored", score, "/30"
print "It took you", (datetime.now() - startTime), "to play the game."

Pastebinのコード

4

1 に答える 1

2

Pygame と Tkinter は融合しません。あなたの UI はいずれかによって提供されるべきです - Tkinter を使用して一時的なダイアログをポップアップするために、ウィンドウ化された (フルスクリーンではない) pygame アプリケーションでいくつかのハックを行うこともできますが、それは通常ではありません。

pygame コードを実行する前に、構成/ゲーム estart ダイアログを表示し、Tkinter メインループを停止して pygame を開始することが可能です。

それ以外の場合は、一貫したエクスペリエンスのために、ゲーム内での使用に Pygame を利用する GUI をプロジェクトに追加する必要があります。(純粋な pygame には、ボタン、メニュー、テキスト エントリなどのサポートがないため)。http://www.pygame.org/wiki/guiをチェックしてください。

于 2013-01-14T00:52:39.663 に答える