你有没有想过可以用自身的编程技术教会大家Python?
今天就带来一个对于我个人而言的大项目:码农之战
编写一个游戏要设计什么呢?首先就是最重要的部分,制定游戏规则。其次,如果想让玩家拥有自己的游戏账号,还需要存档技术,把玩家的基本信息、积分数储存起来,这样,玩家就可以实现自动登录、游戏积分存档了,这样才能让玩家觉得努力打游戏没有白费,自己玩游戏的结果都转化为积分储存起来。这可以更好地留住玩家。
为了吸引玩家,我在游戏中设置了段位制度:每十分一个段位,看到段位升级的玩家就会高兴,就会获得荣誉感,从而为了提高段位不断玩下去!
具体设置的制度大家可以阅读代码得知,在这就不详细说了。
接下来就是编写环节。
首先准备好编写需要的IDE。我这里的运行环境是:win10家庭中文版和Python3.10.4(64-bit)
这里需要安装两个库,不装就有可能像我的信息老师那样(跑不起来)
一个是Python设计游戏最常用的库:pygame,一个是简易图形化界面编写库:easygui,这两个库可以为游戏的开发节省时间和精力,且开发效果很好。
接下来就要准备需要的图片和音效,这里就不摆出来了。
做好了准备工作,可以写代码了。
先是最基本的内容:导库、加载图片和音效、存档或读档等,具体代码如下:
# 导库
import pygame,sys,easygui,time,random
pygame.init()
screen = pygame.display.set_mode((1100,700))
pygame.display.set_caption("码农之战")
myImg = pygame.image.load("h1.png")
myImg2 = pygame.image.load("h2.png")
# 读取/写入用户昵称
try:
with open("name.txt","r",encoding="utf-8") as file:
n = file.read()
except:
name1 = easygui.enterbox(msg='请输入你的昵称:', title='昵称')
try:
with open("name.txt","w",encoding="utf-8") as file:
file.write(name1)
with open("name.txt","r",encoding="utf-8") as file:
n = file.read()
except:
easygui.msgbox("无效操作")
# 加载音效
s1 = pygame.mixer.Sound("c.mp3")
s2 = pygame.mixer.Sound("x.mp3")
下面就是最关键的,编写主循环,这是游戏的“心脏”,它可以使游戏一直运行,直到玩家退出游戏,在主循环下可以写一个主界面,如:
ys = easygui.buttonbox('欢迎来到码农之战',image='h1.png',choices=("开始游戏","其他选项"))
下面是主循环的全部代码,大家可以参考一下:
while True:
ys = easygui.buttonbox('欢迎来到码农之战',image='h1.png',choices=("开始游戏","其他选项"))
if ys == "开始游戏":
with open("wj.txt","r",encoding="utf-8") as fi:
p = int(fi.read())
gq = [1,2,3,4,5]
fs = [10,20,30,40,50]
dw = ["普通码农","初级码农","中级码农","高级码农","王者码农"]
easygui.msgbox("代码指引:print('这里是你要讽刺对方的内容')")
easygui.msgbox("代码指引:input('这里是你要问对方的内容')")
if p >= 6:
easygui.msgbox("""恭喜你,分数超过6分,成功激活高级代码指引
import 函数库名称(导入函数库)
函数库名称.函数名(参数)(使用库中的函数)
举例:
import time
time.sleep(1)
注意,两行代码不能写在同一行
想利用这个代码?那就自行查资料学习吧!
""")
# 初始化血量
d = 40
you = 40
dj = ["54088","08845","这个码农真是逊哪","都傻的你","油饼食不食","霉素汁","蒸乌鱼","你个老六我真是服了","???","什么操作啊?"]
while True:
for event in pygame.event.get():
screen.fill((255,255,255))
myImg = pygame.transform.scale(myImg,(150,150))
screen.blit(myImg,(200,250))
myImg2 = pygame.transform.scale(myImg2,(150,150))
screen.blit(myImg2,(750,250))
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
code = easygui.enterbox(msg='请输入你的代码以进行讽刺', title='讽刺')
w = pygame.font.SysFont("kaiti",40)
w2 = code
if code:
w2 = code
else:
w2 = ""
w3 = w.render("你的代码:" + w2,False,(0,0,0))
screen.blit(w3,(0,0))
if code:
if "print" in code or "input" in code:
d = d - 5
elif "import" in code:
d = d - random.randint(1,3)
s1.play()
hj = random.randint(0,9)
zz = pygame.font.SysFont("kaiti",40)
zz2 = "对方还击:" + "print(" + "'" + dj[hj] +"')"
zz3 = w.render(zz2,False,(0,0,0))
screen.blit(zz3,(0,50))
if p >= 30:
you = you - random.randint(2,7)
else:
you = you - 2
x = 600
s2.play()
y = pygame.font.SysFont("kaiti",40)
y2 = "你的血量:" + str(you)
y3 = w.render(y2,False,(255,0,0))
screen.blit(y3,(150,90))
z = pygame.font.SysFont("kaiti",40)
z2 = "对方血量:" + str(d)
z3 = w.render(z2,False,(255,0,0))
screen.blit(z3,(750,90))
time.sleep(1)
pygame.display.update()
if d <= 0:
easygui.msgbox("You win!",image = "win.png")
p = p + 3
with open("wj.txt","w",encoding="utf-8") as fi:
fi.write(str(p))
break
elif you <= 0:
easygui.msgbox("You fail!",image = "fail.png")
elif ys == "其他选项":
x = easygui.buttonbox(msg='请选择你需要的一项', title='其他选项', choices=("个人中心","退出游戏","关于本游戏"))
if x == "个人中心":
c = [None,None,None]
c[0] = "昵称:" + n
with open("wj.txt","r",encoding="utf-8") as fi:
fn = fi.read()
c[1] = "分数:" + fn
if int(fn) <= 10:
dw2 = "普通码农"
c[2] = "段位:" + dw2
elif int(fn) > 10 and int(fn) <= 20:
dw2 = "初级码农"
c[2] = "段位:" + dw2
elif int(fn) > 20 and int(fn) <= 30:
dw2 = "中级码农"
c[2] = "段位:" + dw2
elif int(fn) > 30 and int(fn) <= 40:
dw2 = "高级码农"
c[2] = "段位:" + dw2
elif int(fn) > 40:
dw2 = "王者码农"
c[2] = "段位:" + dw2
easygui.choicebox('个人中心', choices = c)
elif x == "退出游戏":
break
elif x == "关于本游戏":
about = """
这是一个以码农为题材的游戏
玩家可以通过进行游戏获得分数,不同分数可获得不同的段位
游戏里的段位需要玩家自行探索
"""
easygui.msgbox(about)
这两段合在一起就是全部代码了,再给大家看看运行效果: