質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

518閲覧

name 'muki' is not defined

toshi20000328

総合スコア0

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/01/31 16:08

import pygame
from pygame import mixer
import random
import math
import tkinter

Initialize the pygame

pygame.init()

create the screen

screen = pygame.display.set_mode((800, 600))

Title

pygame.display.set_caption('Space Invaders')

Player

playerImg = pygame.image.load('player.png')
playerX, playerY = 370, 480
playerX_change = 0

#ランダムにしてみる
ani=0

Enemy

enemyImg = pygame.image.load('enemy.png')
enemyX = random.randint(0, 736)
enemyY = random.randint(50, 150)
enemyX_change, enemyY_change = 4, 40

scene=0 #シーンを番号で管理する

Bullet

bulletImg = pygame.image.load('bullet.png')
bulletX, bulletY = 0, 480
bulletX_change, bulletY_change = 0, 3
bullet_state = 'ready'

Score

score_value = 0

def player(x, y):
screen.blit(playerImg, (x, y))

def enemy(x, y):
screen.blit(enemyImg, (x, y))

def fire_bullet(x, y):
global bullet_state
bullet_state = 'fire'
screen.blit(bulletImg, (x + 16, y + 10))

def isCollision(enemyX, enemyY, bulletX, bulletY):
distance = math.sqrt(math.pow(enemyX - bulletX, 2) + math.pow(enemyY - bulletY, 2))
if distance < 27:
return True
else:
return False

#ランダムにしてみる

def main():
move()
animation()
def animaition():
global animation,enemyX,enemyY
canvas.create_image(enemyX,enemyY,image=enemy,tag="player")
def move():
global playerX,playerY,key,animation,scene

if scene == 0: move_enemy() root.after(100,main)

def move_enemy():
global enemyX,enemyY,scene
muki=random.randint(800,440)

Game Loop

running = True
while running:
# RGB = Red, Green, Blue
screen.fill((0, 0, 0))
# playerX += 0.1
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False

if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: playerX_change = -2.5 if event.key == pygame.K_RIGHT: playerX_change = 2.5 if event.key == pygame.K_SPACE: if bullet_state is 'ready': bulletX = playerX fire_bullet(bulletX, bulletY) # Player playerX += playerX_change if playerX <= 0: playerX = 0 elif playerX >= 736: playerX = 736 # Enemy if enemyY > 440: break if muki == 0:#上 enemyY=enemyY-10 if muki == 1:#下 enemyY=enemyY+10 if muki == 2:#右 enemyX=enemyX+10 if muki == 3:#左 enemyX=enemyX-10 if enemyX<10: enemyX=enemyX+10 if enemyX>290: enemyX=enemyX-10 if enemyY<10: enemyY=enemyY+10 if enemyY>290: enemyY=enemyY-10

#ここ消した

collision = isCollision(enemyX, enemyY, bulletX, bulletY) if collision: bulletY = 480 bullet_state = 'ready' score_value += 1 enemyX = random.randint(0, 736) enemyY = random.randint(50, 150) enemy(enemyX, enemyY) # Bullet Movement if bulletY <=0: bulletY = 480 bullet_state = 'ready' if bullet_state is 'fire': fire_bullet(bulletX, bulletY) bulletY -= bulletY_change # Score font = pygame.font.SysFont(None, 32) # フォントの作成 Noneはデフォルトのfreesansbold.ttf score = font.render("Score : " + str(score_value), True, (255,255,255)) # テキストを描画したSurfaceの作成 screen.blit(score, (20,50)) player(playerX, playerY) pygame.display.update() #ランダム root=tkinter.Tk() main() root.mainloop()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toshi20000328

2022/02/01 17:17

変更しましたが治りません。
guest

回答1

0

global enemyX,enemyY,scene

global enemyX,enemyY,scene,muki

に変更してください。

投稿2022/01/31 16:14

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問