ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

饼块游戏的制作

2022-02-04 22:58:18  阅读:256  来源: 互联网

标签:饼块 mf 游戏 render True tm sn 制作 pygame


饼块游戏的介绍

饼块游戏其实是一个我自创的一个小游戏,用户在程序运行后按下‘p’键即可开始游戏,游戏计时根据程序绘制出来的饼块数量的多少来决定。效果图如下:

此游戏将会用到四个不同的库——sys(提供与解释器交互的函数集合库)、math(许多关于数学的函数模块的集合库)、time(提供关于时间的测量的应用的函数集合库)与 pygame(用以写游戏的python模块集合库)

目录

饼块游戏的介绍

1.Pygame的下载(已下载可跳过)

2.Pygame,sys,math,time的导入及初始设置

3.while循环的设置

4.绘制圆

5.绘制线段

6.合并

7.源代码


1.Pygame的下载(已下载可跳过)

Windows徽标键+R,会弹出一个运行框,输入‘cmd’,回车,输入‘pip install pygame’

如果要检查是否已经安装pygame,按下Windows徽标键+R,在运行框内输入‘cmd’,回车,输入‘python’,回车后再输入‘import pygame’,弹出版本号即已安装。

2.Pygame,sys,math,time的导入及初始设置

####查####
import pygame,sys,math,time
pygame.init()#初始化
sn = pygame.display.set_mode((600,500))#定义窗口大小
mt = pygame.font.Font(None,60)#(字体,大小)
pygame.display.set_caption('饼块游戏')

为了以防程序报错,我在导入时使用的是import(使用from···import···在后期循环内会报错,详见后文)。然后使用display.set_mode((,))去自定义窗口的大小,再用font.Font(,)去自定义字体与其大小,以便于后期直接调用这种自定义字体,最后还用到了display.set_caption('')来设置左上角标题。

3.while循环的设置

while 1:
    for event in pygame.event.get():#重复遍历用户输入键的值
        if event.type in (pygame.QUIT,pygame.KEYDOWN):#检测用户是否点击窗口右上角的关闭或者按下任何的键
            sys.exit()#结束程序运行
    pygame.display.update()#用来刷新屏幕进行显示

跟着if后面的这一串在后期需要改动(因为此游戏需要用到键盘)exit()是用来结束程序的一个函数,最后再添加上display.update()进行刷新显示,整个循环的进入,运作,退出的基本结构就出来了

ps:如果在导入时用from···import···报错结果如下:

我们能看到,程序可以进入循环阶段,但在运行时会报错(这时候就连偷懒都不容易了)。将程序改回: 

我们可以看到程序正常运行了。(ps:亲身试错过) 

4.绘制圆

pygame.draw.circle(sn,'black',(300,300),100,10)

这里分别设置了圆的颜色,位置(注:pygame的(0,0)在左上角),半径及其宽度,sn在这段程序外就设置了,这样是为了使其在打开的窗口内显示。

5.绘制线段

pygame.draw.line(sn,'black',(100,100),(400,450),8)

sn的作用跟圆的绘制时的作用一样,紧接着就是颜色,初始位置,结束位置,线条宽度。

 好啦,我们知道了这些,接下来就是对键盘的一顿敲击了

6.合并

首先让用户选择难度

print('请选择困难程度')
print('a为困难,b为中等,c为简单(点击键盘对应键键即可)')

初始化定义

import pygame,sys,math,time
pygame.init()
sn = pygame.display.set_mode((600,500))
mf = pygame.font.Font(None,60)
pygame.display.set_caption('饼块游戏')
a = b = c = d = e = f = g = h = a1 = b1 = c1 = d1 = e1 = f1 = a2 = b2 = c2 = d2 = 0
z = 1

我们创建一个while和for循环及其退出语句(按下e键退出在后文)

print('请选择困难程度')
print('a为困难,b为中等,c为简单(单击键盘此键即可)')
while 1:
    for event in pygame.event.get():#一定要加上此循环语句,否则下一句将会报错(先在for循环内调用)
        if event.type == pygame.QUIT:
            sys.exit()

接着便是判断用户选择的难度了,额外还要附加一个判断用户退出的一个判断

if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_a:
        #(语句执行详见下文)
    elif event.key == pygame.K_b:
        #(语句执行详见下文)
    elif event.key == pygame.K_c:
        #(语句执行详见下文)
    elif event.key == pygame.K_e:
        print('您已选择退出游戏')
        time.sleep(0.7)
        sys.exit()

我们先开干困难关卡的程序,我们的a~h八个字符为0就是困难关卡中的八个按键,首先我们要先绘制出一个圆,再用线段去把圆分成8份,一份一个字母(或数字),用户按照任意顺序按下其中的键,被按到的那个字母(或数字)便会消失(就是以背景色为颜色在同样位置再写一遍既可达到效果)(a中的程序)

#困难模式的绘图
sn.fill('blue')
#绘制圆
pygame.draw.circle(sn,'black',(300,250),200,10)
#绘制线段
pygame.draw.line(sn,'black',(165,110),(420,400),14)#线段基本就复制粘贴既可
pygame.draw.line(sn,'black',(300,50),(300,450),10)
pygame.draw.line(sn,'black',(435,110),(180,400),14)
pygame.draw.line(sn,'black',(102,265),(498,265),10)
#添加运行文字
tm = mf.render('h',True,'red')#也是复制粘贴一波
sn.blit(tm,(170,200))
tm = mf.render('n',True,'red')
sn.blit(tm,(250,125))
tm = mf.render('8',True,'red')
sn.blit(tm,(170,300))
tm = mf.render('1',True,'red')
sn.blit(tm,(250,365))
tm = mf.render('l',True,'red')
sn.blit(tm,(350,125))
tm = mf.render('t',True,'red')
sn.blit(tm,(350,350))
tm = mf.render('z',True,'red')
sn.blit(tm,(430,200))
tm = mf.render('4',True,'red')
sn.blit(tm,(430,300))
pygame.display.update()
z = 2

紧接着判断用户按下p键开始游戏(当a执行后z=2既可执行以下语句,均与if event.key == pygame.K_a:同级)

if z == 2:
    if event.key == pygame.K_p:
        z = 2.5
    print('按下p键开始')

使得z为3后再执行下列循环(可能有人会问我,判断这么麻烦,咋不直接套娃一样一个一个往里套呢。啧,这是不行滴(亲身错误示范得知),会导致程序无法继续进行下一步)。在这就不得不说一个比较重要的函数——perf_counter(),这个函数开始时只要用time去调用它,结束时再调用一次就可得知“开始时间”和“结束时间”了(开始时非0,所以要相减)。最后一行必须将此上数字归零,否则就在下一次执行时由于满足直接进入此处(if a == b == c == d == e == f == g == h == 1:处)执行操作

if z == 2.5:
    st = time.perf_counter()
    z = 3
if z == 3:
    if event.key == pygame.K_h:
        a = 1
        tm = mf.render('h',True,'blue')
        sn.blit(tm,(170,200))
    if event.key == pygame.K_n:
        b = 1
        tm = mf.render('n',True,'blue')
        sn.blit(tm,(250,125))
    if event.key == pygame.K_8:
        c = 1
        tm = mf.render('8',True,'blue')
        sn.blit(tm,(170,300))
    if event.key == pygame.K_1:
        d = 1
        tm = mf.render('1',True,'blue')
        sn.blit(tm,(250,365))
    if event.key == pygame.K_l:
        e = 1
        tm = mf.render('l',True,'blue')
        sn.blit(tm,(350,125))
    if event.key == pygame.K_t:
        f = 1
        tm = mf.render('t',True,'blue')
        sn.blit(tm,(350,350))
    if event.key == pygame.K_z:
        g = 1
        tm = mf.render('z',True,'blue')
        sn.blit(tm,(430,200))
    if event.key == pygame.K_4:
        h = 1
        tm = mf.render('4',True,'blue')
        sn.blit(tm,(430,300))
    pygame.display.update()
if a == b == c == d == e == f == g == h == 1:
    ed = time.perf_counter()
    if ed - st > 5:
    print('挑战失败')
    sys.exit()
else:
    print('挑战成功')
    print('a为困难,b为中等,c为简单(单击键盘此键即可)')
    a = b = c = d = e = f = g = h = 0

中等难度的程序其实就简单些,大部分就是复制,还有一些修改就行了,和a部分差不多,就是少了一些字母

sn.fill('blue')
pygame.draw.circle(sn,'black',(300,250),200,10)
pygame.draw.line(sn,'black',(102,265),(498,265),10)
pygame.draw.line(sn,'black',(165,110),(420,400),14)
pygame.draw.line(sn,'black',(435,110),(180,400),14)
tm = mf.render('q',True,'red')
sn.blit(tm,(170,200))
tm = mf.render('5',True,'red')
sn.blit(tm,(290,125))
tm = mf.render('9',True,'red')
sn.blit(tm,(170,300))
tm = mf.render('m',True,'red')
sn.blit(tm,(290,365))
tm = mf.render('g',True,'red')
sn.blit(tm,(430,200))
tm = mf.render('i',True,'red')
sn.blit(tm,(430,300))
pygame.display.update()
z = 4

以及其执行语句

if z == 4:
    if event.key == pygame.K_p:
    z = 4.5
    print('按下p键开始')
if z == 4.5:
    st1 = time.perf_counter()
    z = 5
if z == 5:
    if event.key == pygame.K_q:
        a1 = 1
        tm = mf.render('q',True,'blue')
        sn.blit(tm,(170,200))
    if event.key == pygame.K_5:
        b1 = 1
        tm = mf.render('5',True,'blue')
        sn.blit(tm,(290,125))
    if event.key == pygame.K_9:
        c1 = 1
        tm = mf.render('9',True,'blue')
        sn.blit(tm,(170,300))
    if event.key == pygame.K_m:
        d1 = 1
        tm = mf.render('m',True,'blue')
        sn.blit(tm,(290,365))
    if event.key == pygame.K_g:
        e1 = 1
        tm = mf.render('g',True,'blue')
        sn.blit(tm,(430,200))
    if event.key == pygame.K_i:
        f1 = 1
        tm = mf.render('i',True,'blue')
        sn.blit(tm,(430,300))
    pygame.display.update()
if a1 == b1 == c1 == d1 == e1 == f1 == 1:
    ed1 = time.perf_counter()
    if ed1 - st1 > 4.5:
        print('挑战失败')
        sys.exit()
    else:
        print('挑战成功')
        print('a为困难,b为中等,c为简单(单击键盘此键即可)')
        a1 = b1 = c1 = d1 = e1 = f1 = 0

最后简单的那部分也没啥难的了,直接上代码吧!

sn.fill('blue')
pygame.draw.circle(sn,'black',(300,250),200,10)
pygame.draw.line(sn,'black',(300,50),(300,450),10)
pygame.draw.line(sn,'black',(102,265),(498,265),10)
tm = mf.render('d',True,'red')
sn.blit(tm,(200,150))
tm = mf.render('h',True,'red')
sn.blit(tm,(390,150))
tm = mf.render('0',True,'red')
sn.blit(tm,(200,350))
tm = mf.render('3',True,'red')
sn.blit(tm,(390,350))
pygame.display.update()
z = 6
if z == 6:
    if event.key == pygame.K_p:
        z = 6.5
    print('按下p键开始')
if z == 6.5:
    st2 = time.perf_counter()
    z = 7
if z == 7:
    if event.key == pygame.K_d:
        a2 = 1
        tm = mf.render('d',True,'blue')
        sn.blit(tm,(200,150))
    if event.key == pygame.K_h:
        b2 = 1
        tm = mf.render('h',True,'blue')
        sn.blit(tm,(390,150))
    if event.key == pygame.K_0:
        c2 = 1
        tm = mf.render('0',True,'blue')
        sn.blit(tm,(200,350))
    if event.key == pygame.K_3:
        d2 = 1
        tm = mf.render('3',True,'blue')
        sn.blit(tm,(390,350))
    pygame.display.update()
if a2 == b2 == c2 == d2 == 1:
    ed2 = time.perf_counter()
    if ed2 - st2 > 2.5:
        print('挑战失败')
        sys.exit()
    else:
        print('挑战成功')
        print('a为困难,b为中等,c为简单(单击键盘此键即可)')
        a2 = b2 = c2 = d2 = 0

7.源代码

最后在此献上源代码:

import pygame,sys,math,time
pygame.init()
sn = pygame.display.set_mode((600,500))
mf = pygame.font.Font(None,50)
pygame.display.set_caption('饼块游戏')
a = b = c = d = e = f = g = h = a1 = b1 = c1 = d1 = e1 = f1 = a2 = b2 = c2 = d2 = 0
print('请选择困难程度')
print('a为困难,b为中等,c为简单(单击键盘此键即可)')
print('按下e退出')
z = 1
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_a:
                sn.fill('blue')
                pygame.draw.circle(sn,'black',(300,250),200,10)
                pygame.draw.line(sn,'black',(165,110),(420,400),14)
                pygame.draw.line(sn,'black',(300,50),(300,450),10)
                pygame.draw.line(sn,'black',(435,110),(180,400),14)
                pygame.draw.line(sn,'black',(102,265),(498,265),10)
                tm = mf.render('h',True,'red')
                sn.blit(tm,(170,200))
                tm = mf.render('n',True,'red')
                sn.blit(tm,(250,125))
                tm = mf.render('8',True,'red')
                sn.blit(tm,(170,300))
                tm = mf.render('1',True,'red')
                sn.blit(tm,(250,365))
                tm = mf.render('l',True,'red')
                sn.blit(tm,(350,125))
                tm = mf.render('t',True,'red')
                sn.blit(tm,(350,350))
                tm = mf.render('z',True,'red')
                sn.blit(tm,(430,200))
                tm = mf.render('4',True,'red')
                sn.blit(tm,(430,300))
                pygame.display.update()
                z = 2
            elif event.key == pygame.K_b:
                sn.fill('blue')
                pygame.draw.circle(sn,'black',(300,250),200,10)
                pygame.draw.line(sn,'black',(102,265),(498,265),10)
                pygame.draw.line(sn,'black',(165,110),(420,400),14)
                pygame.draw.line(sn,'black',(435,110),(180,400),14)
                tm = mf.render('q',True,'red')
                sn.blit(tm,(170,200))
                tm = mf.render('5',True,'red')
                sn.blit(tm,(290,125))
                tm = mf.render('9',True,'red')
                sn.blit(tm,(170,300))
                tm = mf.render('m',True,'red')
                sn.blit(tm,(290,365))
                tm = mf.render('g',True,'red')
                sn.blit(tm,(430,200))
                tm = mf.render('i',True,'red')
                sn.blit(tm,(430,300))
                pygame.display.update()
                z = 4
            elif event.key == pygame.K_c:
                sn.fill('blue')
                pygame.draw.circle(sn,'black',(300,250),200,10)
                pygame.draw.line(sn,'black',(300,50),(300,450),10)
                pygame.draw.line(sn,'black',(102,265),(498,265),10)
                tm = mf.render('d',True,'red')
                sn.blit(tm,(200,150))
                tm = mf.render('h',True,'red')
                sn.blit(tm,(390,150))
                tm = mf.render('0',True,'red')
                sn.blit(tm,(200,350))
                tm = mf.render('3',True,'red')
                sn.blit(tm,(390,350))
                pygame.display.update()
                z = 6
            elif event.key == pygame.K_e:
                print('您已选择退出游戏')
                time.sleep(0.7)
                sys.exit()
            if z == 2:
                if event.key == pygame.K_p:
                    z = 2.5
                print('按下p键开始')
            if z == 2.5:
                st = time.perf_counter()
                z = 3
            if z == 3:
                if event.key == pygame.K_h:
                    a = 1
                    tm = mf.render('h',True,'blue')
                    sn.blit(tm,(170,200))
                if event.key == pygame.K_n:
                    b = 1
                    tm = mf.render('n',True,'blue')
                    sn.blit(tm,(250,125))
                if event.key == pygame.K_8:
                    c = 1
                    tm = mf.render('8',True,'blue')
                    sn.blit(tm,(170,300))
                if event.key == pygame.K_1:
                    d = 1
                    tm = mf.render('1',True,'blue')
                    sn.blit(tm,(250,365))
                if event.key == pygame.K_l:
                    e = 1
                    tm = mf.render('l',True,'blue')
                    sn.blit(tm,(350,125))
                if event.key == pygame.K_t:
                    f = 1
                    tm = mf.render('t',True,'blue')
                    sn.blit(tm,(350,350))
                if event.key == pygame.K_z:
                    g = 1
                    tm = mf.render('z',True,'blue')
                    sn.blit(tm,(430,200))
                if event.key == pygame.K_4:
                    h = 1
                    tm = mf.render('4',True,'blue')
                    sn.blit(tm,(430,300))
                pygame.display.update()
            if a == b == c == d == e == f == g == h == 1:
                ed = time.perf_counter()
                if ed - st > 6.5:
                    print('挑战失败')
                    sys.exit()
                else:
                    print('挑战成功')
                    print('a为困难,b为中等,c为简单(单击键盘此键即可)')
                    a = b = c = d = e = f = g = h = 0
            if z == 4:
                if event.key == pygame.K_p:
                    z = 4.5
                print('按下p键开始')
            if z == 4.5:
                st1 = time.perf_counter()
                z = 5
            if z == 5:
                if event.key == pygame.K_q:
                    a1 = 1
                    tm = mf.render('q',True,'blue')
                    sn.blit(tm,(170,200))
                if event.key == pygame.K_5:
                    b1 = 1
                    tm = mf.render('5',True,'blue')
                    sn.blit(tm,(290,125))
                if event.key == pygame.K_9:
                    c1 = 1
                    tm = mf.render('9',True,'blue')
                    sn.blit(tm,(170,300))
                if event.key == pygame.K_m:
                    d1 = 1
                    tm = mf.render('m',True,'blue')
                    sn.blit(tm,(290,365))
                if event.key == pygame.K_g:
                    e1 = 1
                    tm = mf.render('g',True,'blue')
                    sn.blit(tm,(430,200))
                if event.key == pygame.K_i:
                    f1 = 1
                    tm = mf.render('i',True,'blue')
                    sn.blit(tm,(430,300))
                pygame.display.update()
            if a1 == b1 == c1 == d1 == e1 == f1 == 1:
                ed1 = time.perf_counter()
                if ed1 - st1 > 4.5:
                    print('挑战失败')
                    sys.exit()
                else:
                    print('挑战成功')
                    print('a为困难,b为中等,c为简单(单击键盘此键即可)')
                    a1 = b1 = c1 = d1 = e1 = f1 = 0
            if z == 6:
                if event.key == pygame.K_p:
                    z = 6.5
                print('按下p键开始')
            if z == 6.5:
                st2 = time.perf_counter()
                z = 7
            if z == 7:
                if event.key == pygame.K_d:
                    a2 = 1
                    tm = mf.render('d',True,'blue')
                    sn.blit(tm,(200,150))
                if event.key == pygame.K_h:
                    b2 = 1
                    tm = mf.render('h',True,'blue')
                    sn.blit(tm,(390,150))
                if event.key == pygame.K_0:
                    c2 = 1
                    tm = mf.render('0',True,'blue')
                    sn.blit(tm,(200,350))
                if event.key == pygame.K_3:
                    d2 = 1
                    tm = mf.render('3',True,'blue')
                    sn.blit(tm,(390,350))
                pygame.display.update()
            if a2 == b2 == c2 == d2 == 1:
                ed2 = time.perf_counter()
                if ed2 - st2 > 2.5:
                    print('挑战失败')
                    sys.exit()
                else:
                    print('挑战成功')
                    print('a为困难,b为中等,c为简单(单击键盘此键即可)')
                    a2 = b2 = c2 = d2 = 0

ps:有错请各位指出,还请各位多多包涵噢

标签:饼块,mf,游戏,render,True,tm,sn,制作,pygame
来源: https://blog.csdn.net/LEVEL_SSR/article/details/122772875

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有