Python编写游戏教玩家学Python

你有没有想过可以用自身的编程技术教会大家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)

这两段合在一起就是全部代码了,再给大家看看运行效果:

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值