研究python游戏(1)整合模式

1.

 这一块其实是一直往下运行的。所以当new_food在timer前的话,一直往下运行,只会有用到timer.start(snake_speed)一次,就无法刷新速度。如果只是单纯把time.start那一块放到new_food里,会因为没有实现声明timer而报错,所以最好的办法就是换个位置。——更加深刻领悟到了什么叫自顶向下的运行

2.想把整个程序的运行变成一个小模式但是失败了..或许可以看看游戏一的方式

放弃用一的方式了,直接用了os.system虽然成功了但是有新问题就是无法关闭开始窗口

3.只有window可以blit  我想把window用desktop替代然后直接实现透明背景,但是失败了

4.说不定可以把选择窗口也作为一个分支,但是怎么连结呢?

5.直接考虑如何把文字呈现在界面上好了

6.其实出现的问题很类似,就是两个页面发生了冲突 游戏结束的时候直接出现新的窗口,原先那个并没有结束就会出现问题。

9.1 10:21

睡醒发现队友完成了界面的设置 和我的差别在于:她把一个模式的主函数编成了一个函数的模式——现在我研究一下为什么我失败了:

 我错的地方在于food和fakefood和coloridnow没有设成全局变量 本质是不清楚python程序的调用+不清楚各个数据的意义

我抄!我悟了!本来在主函数里设定的就是全局变量,但是现在我把它扔在一个函数里,其他的程序无法调用就会出现报错,所以这个时候就要设为全局变量。所以以后遇到要改的都可以如法炮制。

知识储备

1.new_food()传入形参为蛇头 当蛇头和食物坐标相同则表示吃掉,并且要生成新的食物

2.start_game()正常模式的主函数

        die_snake()正常模式死亡——die_flag

 3.start_kgame()可穿墙

        through_sanke()传入蛇头和蛇身 die_flag

4.show_end()结束展示得分

5.into_game()游戏初始界面

        button()按钮监听函数

6.运行模块 if __name__ =='__main__':

尝试:

1.bgm是真的好加

 

读懂游戏一:

1.position类继承了object对象,拥有了好多可操作对象,这些都是类中的高级特性。

应该是给对象都可以加上x,y这样的程度

new_food = Position(randint(0, 48) * 20, randint(0, 29) * 20)——随机找一个位置赋给new_food

这个return new_food真的不太理解????

 2.绘制圆形方法:pygame.draw.circle(Surface, color, pos , raduis, width)

Surfuce参数: 传入需要在该Surface对象上绘制圆形的Surface对象; color参数: 需要绘制圆形的线的颜色,传入一个rgb三原色元组 . pos参数:圆心的坐标,raduis 表示圆的半径, width参数:表示绘制圆的线的宽度,当为0时,圆内全部被填充。

3.退出游戏

 既结束游戏也结束界面

4.游戏结束时的面板

B.blit()的功能是把一张图A粘贴到另一张图B上,这意味着B上的图将被A上的图覆盖,且永久不能恢复。blit()的原型是blit(source, dest, area=None, special_flags = 0),返回值为rect对象,返回被改变的画面区域。source:一个surface对象,可以理解为一张图;
dest:一个可以标识坐标的东西,可以是一个(x,y)元组。也可以是一个(x,y,height,width)元组,也可以是一个Rect对象,Rect对象可以理解为有位置有大小的矩形。
area:一个Rect对象(下面这个对blit的讲解非常到位(18条消息) pygame中blit()的参数的说明以及脏矩形动画形成的简要说明_TheCity2333的博客-CSDN博客_pygame的blit

 5.

pygame.display.set_caption()

功能:设置当前窗口标

pygame.display.update()

功能:软件显示屏幕的更新部分

  1. 此函数类似于用于软件显示的pygame.display.flip()的优化版本。它只允许更新屏幕的一部分,而不是整个区域。如果没有传递参数,它将更新整个表面积,如pygame.display.flip()。

(18条消息) pygame中display模块方法详解_Rita_Aloha的博客-CSDN博客_pygame.display

 6.从系统的字体库中创建一个 Font 对象

pygame.font.SysFont() 

http://c.biancheng.net/pygame/font.html

7.

pygame.font.Font.render() 创一个新的surface 再用blit加上去

功能:在新Surface上绘制文本

fontsurf = font.render('游戏结束! 你的得分为: %s' % score, False, black)

    small_window.blit(fontsurf, (250, 200))

8.time.sleep()推迟执行的秒数

先停下,让用户看清楚再结束进程。

9.die_flag

 10.pygame.event.get()

从事件队列中获取一个事件,并从队列中删除该事件

event.type

if event.type == pygame.QUIT:

                show_end()

            elif event.type == pygame.KEYDOWN:(event.key

11.插入蛇头到蛇身snake_body.insert(0, Position(head.x, head.y))

list.insert(index, obj)

12.没有吃到食物就要去掉蛇尾snake_body.pop()

13.clock.tick(8)控制帧率,从而设置贪吃蛇速度

14.按照方向一个个增长,去掉最后一个

 

15.获取光标位置

pygame.mouse.get_pos

Returns the x and y position of the mouse cursor. 

pygame.mouse.get_pressed

get the state of the mouse buttons

Returns a sequence of booleans representing the state of all the mouse buttons.

16.创建button和它的颜色 

17. pygame.draw.rect(surface, color, rect, width) 画矩形

ac指的是按钮按下的颜色。如果不执行就是ic按钮初始颜色

action应该是按下的动作

18.在一个新surface对象上绘制文本

pygame.font.Font.render()

其实就是创建一个图像然后画到目标surface上

get_rect()是一个处理矩形图像的方法,返回值包含矩形的居中属性

smallrect.center把按钮中心的位置赋给smallrect也就是button(中心重合)

19.window.blit(init_background, (0, 0)) 应该是把init放在window正中央

20.python.quit其实是用户按下窗口的关闭按钮

 Pygame Event事件模块(详细示例) (biancheng.net)

基本看得懂了

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值