弹弹球小游戏__怀念那个没有智能机的时代
作为80后的我们,越来越多的怀念过去,在80年代,我国的电子游戏业经历了从无到有、快速发展的历程。在80年代初,电子游戏的概念刚刚传入中国,国内的游戏市场还处于萌芽状态。随着改革开放的深入,国外的一些电子游戏机和游戏开始进入中国市场,逐渐引起了一些国内企业的关注和兴趣。
在这个时期,一些国内企业开始尝试自主研发电子游戏。1984年,我国第一款自主研发的电子游戏《反弹球》诞生。这款游戏是由北京大学的学生设计的,它基于Apple II计算机平台,采用了简单的图形和音效,但具有很强的趣味性和挑战性。今天,使用卡片大小的行空板可以完成这款童年的游戏,何乐而不为呢。
《反弹球》游戏的玩法非常简单,玩家需要通过控制挡板的位置,使小球在屏幕上反弹,并尽可能多地击中屏幕上的目标。游戏难度随着关卡的增加而逐渐提高,需要玩家不断提高自己的反应速度和操作技巧。
使用硬件
行空板 1块
游戏画面设计思维导图
进行中的游戏画面元素为自动运动的弹力球和手动控制的挡板
按A挡板上移
按B挡板下移
注:行空板屏幕分辨率为240x320,因此unihiker库分辨率也为240x320,坐标原点为屏幕左上角,向右为x轴正方向,向下为y轴正方向。
程序设计
1.游戏初始化程序
定义一个初始化界面的函数,分别展示欢迎语句 ,并选择难易程度,点击不同的难易程度,出现不同速度的小球。如果不点击默认6秒后小学生级别的难度挑战。
每个级别的按钮都对应不同的回调函数,回调函数修改小球移动的速度值。
2.游戏运行中程序
该程序中定义了多个变量
l:调节移动挡板和小球移动速度的倍数。
s:游戏得分。
x:小球的横坐标。
y:小球的纵坐标。
x1:小球每个循环移动的横向像素数。
y1:小球每个循环移动的纵向像素数。
rx:挡板的长方形顶点。
该程序中,每隔0.1秒小球移动l个像素,程序中分别设计了小球碰到上下和左边边界弹回,只有碰到右边的挡板得分,如下所示。
每次循环后还要更新下小球、挡板的位置以及得分的分值,程序如下所示:
3.程序结束画面
小球碰到右边边界,并未碰到挡板时,游戏结束,这里有个检测小球是否碰到挡板的逻辑表达式
游戏结束时,展示该轮游戏得分,并展示相应的表情。
程序如下:
完整的python代码:
# -*- coding: UTF-8 -*-
# MindPlus
# Python
from unihiker import GUI
import time
# 自定义函数
def ChuShiHua():
xx=u_gui.draw_text(text="欢迎来到弹弹球游戏,选择游戏难度。",x=0,y=0,font_size=20, color="#0000FF")
easy=u_gui.add_button(text="小学森级",x=0,y=30,w=80,h=30,onclick=button_click1)
easy=u_gui.add_button(text="大学森级",x=0,y=70,w=80,h=30,onclick=button_click2)
easy=u_gui.add_button(text="jiao兽级",x=0,y=110,w=80,h=30,onclick=button_click3)
x1x=u_gui.draw_text(text="6秒后以小学生开始游戏.......",x=0,y=150,font_size=20, color="#0000FF")
time.sleep(6)
# 事件回调函数
def on_buttona_click_callback():
global rx
rx = (rx - (l * 2))
if (rx <= 0):
rx = 0
def on_buttonb_click_callback():
global rx
rx = (rx + (l * 2))
if (rx >= 290):
rx = 290
def button_click1():
global l
l = 1
def button_click2():
global l
l = 4
def button_click3():
global l
l = 8
u_gui=GUI()
u_gui.on_a_click(on_buttona_click_callback)
u_gui.on_b_click(on_buttonb_click_callback)
ChuShiHua()
l = 3
s = 0
x = 63
y = 31
x1 = 1
y1 = -1
rx = 50
u_gui.clear()
rec=u_gui.fill_rect(x=238,y=rx,w=2,h=30,color="#0000FF")
score=u_gui.draw_text(text=(str("本局得分:") + str(s)),x=0,y=0,font_size=20, color="#0000FF")
circle=u_gui.draw_circle(x=x,y=y,r=3,width=1,color="#0000FF")
while True:
time.sleep(0.1)
score.config(text=(str("本局得分:") + str(s)))
rec.config(y=rx)
circle.config(y=x)
circle.config(x=y)
x = (x - (l * x1))
y = (y - (l * y1))
if ((x <= 2) or (x >= 320)):
x1 = (x1 * -1)
if (y <= 2):
y1 = (y1 * -1)
if (y >= 238):
if ((x >= (rx - 0)) and (x <= (rx + 30))):
s = (s + 1)
y1 = (y1 * -1)
else:
u_gui.clear()
zcj=u_gui.draw_text(text="总成绩为: %1.0f分!"%(s),x=0,y=0,font_size=20, color="#0000FF")
if (s < 10):
wx=u_gui.draw_emoji(emoji="Angry",x=0,y=50,duration=0.2)
elif (s < 20):
wx.config(emoji="Sweat")
elif (s < 30):
wx.config(emoji="Smile")
运行效果
不足与改进
“deadline是生产力”,这句话说得好,临近限期才想到做这个,前期准备不算太充分吧!
本例子中的不足有以下几点:
1、缺少一些美工的元素,例如漂亮的背景,前景等。
2、没加入炫酷的音乐和振奋人心的音效。
3、还缺少游戏结束后重新游戏的选项,因能力有限,继续学习。
附件
附件
_深蓝_2023.10.27
好的