記事を書いて Python プログラムを共有するのはこれが初めてです。たくさん気に入ってくれて、私の文章が良いと思ったら、私にも注目してください。今後も記事をどんどん投稿していきます!
今日は自分で作ったゲーム、バトルオブボールズを紹介します!見てみましょう!
-------------------------------------------------- - コードを書き始めましょう!-------------------------------------------------- -------
コーディング前のヒント:
まず、cmd で pygame モジュールをインストールします。
pip install pygame
1. 初期化
まず、非常に重要な pygame、random、および math モジュール (私は as として使用) をインポートし、プログラムを初期化し、インターフェイスを作成し、タイトルを記述します。
# import pygame, random and math
import pygame as pg
import random as rd
import math
# init program
pg.init()
# set screen
screen = pg.display.set_mode((1000, 500))
screen.fill((255, 255, 255))
# set title
pg.display.set_caption("球球大作战", "4.0")
プログラムが初期化された後、次のステップを実行できます。
2. 関数、メソッド、およびクラスの定義
プログラムは、関数とクラスなしでは機能しません。円を描くのに便利なように、最初に関数 circle を定義する必要があります。
# def circle
def circle(color, point, r, size):
pg.draw.circle(screen, color, point, r, size)
次にやるべきことはボールクラスです。食べられるためには、クラスを使用する必要があります(わかりますか?)
# class ball
class Ball():
def __init__(self):
self.color = (rd.randint(0, 255), rd.randint(0, 255), rd.randint(0, 255))
self.x =rd.randint(0, 1000)
self.y = rd.randint(0, 500)
self.r = rd.randint(5, 15)
self.size = rd.randint(5, 15)
次に、プレーヤーが制御するボールのリストとペイントされたボールのリストを設定します。
# make a balllist
balllist = []
for i in range(600):
balllist.append(Ball())
# creat myball
myball = Ball()
myball.color = (0, 0, 0)
myball.x = 500
myball.y = 250
myball.size = 5
myball.speed = 10
この段落の最後に、適切な判断を下し、プレスし、ボールを食べて生成する必要があります。
ここでは math モジュールが使用されており、ピタゴラスの定理も使用されています。
10 秒ごとに 30 個のボールが生成されるため、ボールがなくなることはありません。
より現実的にするために、他のコードも追加しました。食べれば食べるほど遅くなります。ここでは *=0.() にすることをお勧めします。好きなだけ調整できます。なぜ *=? / または / / のどちらかが割り切れないか、0 に割り切れないので、面倒です。
# def check touch
# use the pythagorean theorem
def touch(myX, myY, fX, fY, myR, fR):
distance = math.sqrt((myX - fX) ** 2 + (myY - fY) ** 2)
if distance <= myR + fR:
# just return True
return True
else:
# return False
return False
# def foodDelivery
def foodDelivery():
time = pg.time.get_ticks()
# every 10 seconds put 30 foods
if time % 10000 >= 9000 and time % 10000 <= 9020:
for i in range(30):
balllist.append(Ball())
# def draw
# use "Ball" and for range to append in the balllist
def draw():
for ball in balllist:
if touch(myball.x, myball.y, ball.x, ball.y, myball.size, ball.size):
balllist.remove(ball)
myball.size += 0.1
# make the speed to be smaller than the last one
# use the multiplier scale decreases and inverse proportional function
myball.speed *= 0.992
else:
circle(ball.color, (ball.x, ball.y), ball.size, 0)
circle(myball.color, (myball.x, myball.y), myball.size, 0)
このセクションは完了です。
3. メイン プログラムが実行されます
次のステップは真剣でなければならず、メインプログラムはすぐに実行されます。
ヒント: fps (フレーム レート) を適切に制御する必要があります。そうしないと、コンピュータ グラフィックス カードと CPU が動かなくなる可能性があります。プログラムが突然エラーを報告したり、一時停止して終了したりしないように、アンチジャミング プログラムを作成する必要があります。
# check fps, do not quit program
fps = pg.time.Clock()
# check quit and play program
while True:
# do not make the fps so high
# if the fps is high, the computer will ~"bomb!"
fps.tick(60)
event = pg.event.poll()
if event.type == pg.QUIT:
pg.quit()
exit()
次に行うことは、ボールを動かすことです。pygame.key.get_pressed() を使用して判断します。
keys = pg.key.get_pressed()
# make the ball to move
# I use the "wasd"
# also can use up down right left
if keys[pg.K_w]:
myball.y -= myball.speed
"wasd" は上下左右のいずれかになります。x 座標軸と y 座標軸の足し算と引き算に注意してください。
# check quit and play program
while True:
# do not make the fps so high
# if the fps is high, the computer will ~"bomb!"
fps.tick(60)
event = pg.event.poll()
if event.type == pg.QUIT:
pg.quit()
exit()
keys = pg.key.get_pressed()
# make the ball to move
# I use the "wasd"
# also can use up down right left
if keys[pg.K_w]:
myball.y -= myball.speed
if keys[pg.K_a]:
myball.x -= myball.speed
if keys[pg.K_s]:
myball.y += myball.speed
if keys[pg.K_d]:
myball.x += myball.speed
if keys[pg.K_UP]:
myball.y -= myball.speed
if keys[pg.K_DOWN]:
myball.y += myball.speed
if keys[pg.K_LEFT]:
myball.x -= myball.speed
if keys[pg.K_RIGHT]:
myball.x += myball.speed
# the e is to update ball's xy
elif keys[pg.K_e]:
myball.x, myball.y = 500, 250
最後に、更新と描画の方法を書いて、全体のプログラムは完成です! (更新しやすいように塗りつぶしを忘れずに)
while True:
# do not make the fps so high
# if the fps is high, the computer will ~"bomb!"
fps.tick(60)
event = pg.event.poll()
if event.type == pg.QUIT:
pg.quit()
exit()
keys = pg.key.get_pressed()
# make the ball to move
# I use the "wasd"
# also can use up down right left
if keys[pg.K_w]:
myball.y -= myball.speed
if keys[pg.K_a]:
myball.x -= myball.speed
if keys[pg.K_s]:
myball.y += myball.speed
if keys[pg.K_d]:
myball.x += myball.speed
if keys[pg.K_UP]:
myball.y -= myball.speed
if keys[pg.K_DOWN]:
myball.y += myball.speed
if keys[pg.K_LEFT]:
myball.x -= myball.speed
if keys[pg.K_RIGHT]:
myball.x += myball.speed
# the e is to update ball's xy
elif keys[pg.K_e]:
myball.x, myball.y = 500, 250
# draw and check
draw()
foodDelivery()
# display program
pg.display.update()
screen.fill((255, 255, 255))
4. 完全なコード
最後に、すべてのコードが表示されます。
# import pygame, random and math
import pygame as pg
import random as rd
import math
# init program
pg.init()
# set screen
screen = pg.display.set_mode((1000, 500))
screen.fill((255, 255, 255))
# set title
pg.display.set_caption("BallFight_Avaritia", "4.0")
# Chinese:pg.display.set_caption("球球大作战_无尽贪婪", "4.0")
# def circle
def circle(color, point, r, size):
pg.draw.circle(screen, color, point, r, size)
# class ball
class Ball():
def __init__(self):
self.color = (rd.randint(0, 255), rd.randint(0, 255), rd.randint(0, 255))
self.x =rd.randint(0, 1000)
self.y = rd.randint(0, 500)
self.r = rd.randint(5, 15)
self.size = rd.randint(5, 15)
# make a balllist
balllist = []
for i in range(600):
balllist.append(Ball())
# creat myball
myball = Ball()
myball.color = (0, 0, 0)
myball.x = 500
myball.y = 250
myball.size = 5
myball.speed = 10
# def check touch
# use the pythagorean theorem
def touch(myX, myY, fX, fY, myR, fR):
distance = math.sqrt((myX - fX) ** 2 + (myY - fY) ** 2)
if distance <= myR + fR:
# just return True
return True
else:
# return False
return False
# def foodDelivery
def foodDelivery():
time = pg.time.get_ticks()
# every 10 seconds put 30 foods
if time % 10000 >= 9000 and time % 10000 <= 9020:
for i in range(30):
balllist.append(Ball())
# def draw
# use "Ball" and for range to append in the balllist
def draw():
for ball in balllist:
if touch(myball.x, myball.y, ball.x, ball.y, myball.size, ball.size):
balllist.remove(ball)
myball.size += 0.1
# make the speed to be smaller than the last one
# use the multiplier scale decreases and inverse proportional function
myball.speed *= 0.992
else:
circle(ball.color, (ball.x, ball.y), ball.size, 0)
circle(myball.color, (myball.x, myball.y), myball.size, 0)
# check fps, do not quit program
fps = pg.time.Clock()
# check quit and play program
while True:
# do not make the fps so high
# if the fps is high, the computer will ~"bomb!"
fps.tick(60)
event = pg.event.poll()
if event.type == pg.QUIT:
pg.quit()
exit()
keys = pg.key.get_pressed()
# make the ball to move
# I use the "wasd"
# also can use up down right left
if keys[pg.K_w]:
myball.y -= myball.speed
if keys[pg.K_a]:
myball.x -= myball.speed
if keys[pg.K_s]:
myball.y += myball.speed
if keys[pg.K_d]:
myball.x += myball.speed
if keys[pg.K_UP]:
myball.y -= myball.speed
if keys[pg.K_DOWN]:
myball.y += myball.speed
if keys[pg.K_LEFT]:
myball.x -= myball.speed
if keys[pg.K_RIGHT]:
myball.x += myball.speed
# the e is to update ball's xy
elif keys[pg.K_e]:
myball.x, myball.y = 500, 250
# draw and check
draw()
foodDelivery()
# display program
pg.display.update()
screen.fill((255, 255, 255))
五、レンダリング
6.知識まとめ
このプログラミングを通じて、pygame を使用してゲームを作成する方法を学び、多くのモジュールと複雑なコードも使用しました。
また、random、math、pygame モジュールの使用方法を学び、pygme モジュールの機能についても学びました。
私たちが操作するボールは、大きな白と白の天使のようなもので、ウイルス (他の食べられるボール) と戦うために最善を尽くし、私たちをより安全にします。
困難を克服し、流行を克服するために、誰もが自宅での隔離期間中にPythonについてさらに学び、プログラミングを学び、プログラムを共有することを願っています。
みんな大好き〜読んでくれてありがとう!また後で
イースターエッグ: (次号で公開: オーロラ ラビリンス)