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
()
功能:软件显示屏幕的更新部分
- 此函数类似于用于软件显示的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)
基本看得懂了