大家好!今天来用 python中的arcade库做小游戏。arcade库相对于pygame库知名度相对低一些,但我认为这个库做游戏也很不错。
1.整体代码
import arcade
import time
print("欢迎游玩反弹小球! v1.0.2")
print("下面是一些操作提示,请认真阅读。")
print("1.左侧是玩家,用上键和下键进行移动;右侧是AI。")
print("2.打到球随机获得1-3个金币,没有打到球则自动退出游戏。")
print("5秒后进入游戏。")
time.sleep(5)
class MyWindow(arcade.Window):
def __init__(self):
super().__init__(600,700,"反弹小球")
def setup(self):
self.ball=arcade.Sprite("res/smallball.png",scale=1,center_x=400,center_y=200)
self.block_1=arcade.Sprite("res/block_1.png",scale=1,center_x=15,center_y=350)
self.block_2=arcade.Sprite("res/block_2.png",scale=1,center_x=585,center_y=350)
self.line=arcade.Sprite("res/line.png",scale=1,center_x=300,center_y=350)
self.speed=2
self.ball.change_x=self.speed
self.ball.change_y=self.speed
self.ball.change_angle=1
self.music=arcade.load_sound("res/get.mp3")
self.music2=arcade.load_sound("res/end.mp3")
self.coin=0
def on_draw(self):
arcade.start_render()
self.ball.draw()
self.block_1.draw()
self.block_2.draw()
self.line.draw()
arcade.draw_text("玩家",140,50,(150,150,150),font_size=40,anchor_x="center",anchor_y="center",font_name="res/黑体.ttf")
arcade.draw_text("AI",465,50,(150,150,150),font_size=40,anchor_x="center",anchor_y="center",font_name="res/黑体.ttf")
def on_update(self, delta_time: float):
if arcade.check_for_collision(self.block_1,self.ball)==True:
self.ball.change_x=self.speed
arcade.play_sound(self.music)
self.coin+=1
if arcade.check_for_collision(self.block_2,self.ball)==True:
self.ball.change_x=-self.speed
self.speed+=0.2
if self.ball.top>=700:
self.ball.change_y=-self.speed
if self.ball.right>=600:
self.ball.change_x=-self.speed
if self.ball.bottom<=0:
self.ball.change_y=self.speed
if self.ball.left<=0:
arcade.play_sound(self.music2)
time.sleep(2)
print("恭喜您获得了",self.coin,"枚金币!")
self.close()
if self.block_1.change_y>0 and self.block_1.top>=700:
self.block_1.top=700
self.block_1.change_y=0
if self.block_1.change_y<0 and self.block_1.bottom<=0:
self.block_1.bottom=0
self.block_1.change_y=0
if self.block_2.change_y<0 and self.block_2.top<=0:
self.block_2.top=700
self.block_2.change_y=0
if self.block_2.change_y<0 and self.block_2.bottom<=0:
self.block_2.bottom=0
self.block_2.change_y=0
self.block_2.center_y=self.ball.center_y
self.ball.update()
self.block_1.update()
self.block_2.update()
def on_key_press(self, symbol: int, modifiers: int):
if symbol==arcade.key.UP:
self.block_1.change_y=10
if self.speed==5:
self.speed=5
if symbol==arcade.key.DOWN:
self.block_1.change_y=-10
self.speed+=0.2
if self.speed==5:
self.speed=3
def on_key_release(self, symbol: int, modifiers: int):
if symbol==arcade.key.UP or symbol==arcade.key.DOWN:
self.block_1.change_y=0
win=MyWindow()
win.setup()
arcade.run()
2.角色注意
以上是全部代码。其中的smallball、block_1、block_2、line是四个图片,可以自己用画图软件绘制绘制。
block_1:长100像素,宽30像素的白色填充长方形。
block_2:长100像素,宽30像素的白色填充长方形 。
line:长700像素,宽20像素的白色填充长方形。
ball:直径24像素的白色填充圆形。
绘制完后需要保存到res文件夹。
3.代码解析
1.使用__init__函数修改窗口数据
2.使用setup函数设置基础数据
1.设置角色(smallball、block_1、block_2、line)
2.设置小球初始数值(速度、旋转)
3.设置音乐数值
4.设置金币数值
3.使用on_draw函数绘制角色和文字
4.使用on_update函数更新数据
1.检查小球和两个挡板的碰撞
2.检查两个挡板的上下限制
3.更新数据
5.使用on_key_press函数和on_key_release函数检测键盘事件
4.注意事项
注意,如果没有安装arcade库,需要用如下代码在终端安装。
pip install arcade
5.玩法
使用上、下键控制左侧挡板移动,打到得分,没打到游戏自动退出。