用Python完成游戏从:小笨鸟,到小飞鸟,同时将单机游戏,变成联网游戏

在B站学习UP主:趣派编程,“99%相似度!手把手教你用Python制作Flappy Bird像素鸟游戏!“ 后有感而发。

Flappy Bird


单独的一只小笨鸟多么的无聊

在UP主:趣派编程,做的项目下,原本的小笨鸟有三种颜色,分别是黄色,蓝色,红色,所以我想,能不能做成三种属性的鸟,说做就做,我将蓝色,定义为鹰,速度会更快,我将红色定义为火烈鸟,跳得高,且速度快。每到10,修改一种状态。
在如此设想下,我们就只需要修改,game_window()中,得分判定后的代码,同时提前添加temp= 0在while Ture之前,这里的eagle,falcon是自己找的素材,为鹰叫和另一种鸟叫。

        #得分判定if bird.rect.left + first_pipe_up.x_vel < first_pipe_up.rect.centerx<bird.rect.left:AUDIO['score'].play()score +=1temp = score%10if temp==0:times+=1times %=3if times ==1:AUDIO['eagle'].play()if bird.rect.left + first_pipe_up.x_vel < first_pipe_up.rect.centerx<bird.rect.left:AUDIO['eagle'].stop()AUDIO['score'].play()bird.color='blue'for pipe in pipe_group.sprites():pipe.x_vel = -5if times== 2:AUDIO['falcon'].play()if bird.rect.left + first_pipe_up.x_vel < first_pipe_up.rect.centerx<bird.rect.left:AUDIO['falcon'].stop()AUDIO['score'].play()bird.color='red'for pipe in pipe_group.sprites():pipe.x_vel = -7PIPE_GAP=120if times==0:bird.color='yellow'for pipe in pipe_group.sprites():pipe.x_vel = -4

修改鸟类中的参数,定义在红色的时候,增加跳高,同时修改鸟的颜色,这样在main函数中就不用导入小鸟了。

class Bird:def __init__(self,x,y):self.color = 'yellow'self.frames = [0] * REPEAT + [1]*REPEAT+[2]*REPEAT +[1]*REPEATself.idx = 0self.images = [IMAGES[self.color+'-up'],IMAGES[self.color+'-mid'],IMAGES[self.color+'-down']]self.image = self.images[self.frames[self.idx]]self.rect = self.image.get_rect()self.rect.x = xself.rect.y = yself.y_vel = -10self.max_y_vel = 10self.gravity = 1self.rotate = 45self.max_rotate = -20self.rotate_vel = -3self.y_vel_after_flap = -10self.rotate_after_flap = 45self.dying = Falsedef update(self,flap=False):self.images = [IMAGES[self.color+'-up'],IMAGES[self.color+'-mid'],IMAGES[self.color+'-down']]if flap:self.y_vel = self.y_vel_after_flapself.rotate = self.rotate_after_flapif self.color == 'red':self.y_vel = -12self.y_vel = min(self.y_vel +self.gravity,self.max_y_vel)self.rect.y +=self.y_velself.rotate = max(self.rotate+self.rotate_vel,self.max_rotate)self.idx +=1self.idx %= len(self.frames)self.image = self.images[self.frames[self.idx]]self.image = pygame.transform.rotate(self.image,self.rotate)def go_die(self):if self.rect.y<FLOOR_Y:self.rect.y +=self.max_y_velself.rotate = -90self.image = self.images[self.frames[self.idx]]self.image = pygame.transform.rotate(self.image,self.rotate)else:self.dying=False

第二个功能:联网,这里就是制作排行榜

最后有一个自己的服务器,或者内网穿透也可以

服务器端,本来是想用socket,但是不会,而且个人觉得两端通讯,socket对于非同在一个局域网,或非公网IP下交流是有问题的,私网IP是可以发送数据到公网iP,但是怎么回来呢,公网IP下的服务器是不能通过私网iP发送信息的,所以干脆直接做成服务器的模式,在游戏中采用get请求,获取用户和得分信息,在游戏中采用post请求,发送用户和得分信息,剩下的,交给服务器端接受处理即可。
服务器端代码如下:需要提前创建好Flappy表,定义好:username,goal,数据,tip:goal最好定义为int型,因为排行榜要以分数作降序排列。

import pymysql
#MySql
def get_conn():conn = pymysql.connect(host='localhost', port=3306, user='****', passwd='*****', db='****',charset='utf8')return conn
def update(sql,args):conn = get_conn()cur = conn.cursor()result = cur.execute(sql,args)conn.commit()cur.close()conn.close()
def insert(sql, args):conn = get_conn()cur = conn.cursor()result = cur.execute(sql, args)conn.commit()cur.close()conn.close()
def My_insert(username,goal):sql='INSERT INTO Flappy VALUES(%s,%s)'insert(sql,(username,goal))
def query(sql):result = []conn = get_conn()cur = conn.cursor()cur.execute(sql)results = cur.fetchall()a = 0for row in results:a +=1if a > 3:continueusername = row[0]goal = row[1]result.append(username)result.append(goal)return result
def query2(sql,args):result = []conn = get_conn()cur = conn.cursor()cur.execute(sql,args)results = cur.fetchall()a = 0for row in results:a +=1if a > 3:continueusername = row[0]goal = row[1]result.append(username)result.append(goal)return result
def My_Find():sql = 'SELECT  * FROM Flappy order by goal desc'result = query(sql)if result == []:err=Truereturn result,errelse:err = Falsereturn result,err
def My_FindName(username):sql = 'SELECT  * FROM Flappy where username=%s;'args = usernameresult = query2(sql,args)if result == []:err=Truereturn result,errelse:err = Falsereturn result,errdef Update_Score(username,goal):sql = 'UPDATE Flappy SET goal = %s WHERE username = %s'args = (goal,username)update(sql,args)# coding:utf-8
from flask import Flask,jsonify
import json
# 创建app应用,__name__是python预定义变量,被设置为使用本模块.
app = Flask(__name__)
app.config['SECRET_KEY'] = '123456'
# 导入模板模块
from flask import Flask, request
@app.route('/', methods=['GET', 'POST'])
def login():if request.method == 'POST':json_user_infos = request.get_data()user_infors = json.loads(json_user_infos.decode('utf8'))username = user_infors.get("name")goal = int(user_infors.get("goal"))result,err = My_FindName(username)if err:My_insert(username,goal)else:if goal <= int(result[1]):return "200"else:Update_Score(username,goal)return "200"result,err = My_Find()user_dicts = {}num = 0num_sum=0user_dict = {}for a in result:num+=1if num==1:user_dict["name"] = aif num==2:user_dict["goal"] = anum_sum+=1num=0user_dicts[str(num_sum)] = user_dictuser_dict= {}json_data = json.dumps(user_dicts)return json_dataif __name__ == '__main__':app.run(host='127.0.0.1', port=****, debug=True)#这里端口自己定义,自己开放即可

获取数据当然要写入数据,我们只需要发请求,接收数据,输出到屏幕上即可,这里输出方式,当然是还是参考UP主:趣派编程,中的99%相似度!手把手教你用Python制作超级玛丽游戏,说实话,这个超级玛丽怎么还没更新完!!!哈哈哈,在这里还是感谢UP主的无私奉献(这是不要钱就能看的吗!

Pygame实现小笨鸟,到小飞鸟相关推荐

  1. 计算机二级(五)小笨鸟学飞版

    分时操作系统是使一台计算机采用时间片轮转的方式同时为几个.几十个甚至几百个用户服务的一种操作系统.把计算机与许多终端用户连接起来,分时操作系统将系统处理机时间与内存空间按一定的时间间隔,轮流地切换给各 ...

  2. 别把自己当作“千里马”,“笨鸟”先飞才是硬道理。

    某人以"千里马"自居,结果"牢骚"满腹,古代有韩愈一则<马说>,经典"牢骚"名句:千里马常有,而伯乐不常有. 而今世上,人人都是 ...

  3. Pygame从0实战10(泡泡小游戏添加音效)

    1.Pygame从0实战10(泡泡小游戏添加音效) 这节我们将如何在Pygame游戏中添加音效并且在上节未完成的泡泡游戏中 添加音效 下面是资源链接 点击打开链接 密码:hfjz 播放声音和音效 建议 ...

  4. 初中参观机器人博物馆的作文_展馆导览机器人好不好用?小笨展馆机器人案例...

    每次科技发展都会给社会带来技术变革,例如工业革命时代的纺纱机,发电机等,极大地提高了生产效率,推动了社会的进步.二十一世纪,人工智能成为了当下技术变革的排头兵,机器人作为其载体已经被应用在各类展馆当中 ...

  5. 小笨狼的LLDB技巧:chisel

    不玩LLDB,不知道chisel有多强大.chisel之于LLDB,就像iPhone之于手机,前者几乎给后者重新下了一次定义.如果你还不知道什么是LLDB,请看我上一篇文章小笨狼与LLDB的故事 安装 ...

  6. 用pygame做一个简单的python小游戏---贪吃蛇

    用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...

  7. 用pygame做一个简单的python小游戏---七彩同心圆

    用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...

  8. 用pygame做一个简单的python小游戏---生命游戏

    用pygame做一个简单的python小游戏-生命游戏 生命游戏(Game of Life) 生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授 ...

  9. PYTHON pygame库实战——实现双人弹球小游戏

    PYTHON pygame实战--运用pygame库实现双人弹球小游戏 使用python pygame库实现一个双人弹球小游戏,两人分别控制一个左右移动的挡板用来拦截小球,小球会在两板间不停弹跳,拦截 ...

最新文章

  1. 保证你现在和未来不失业的10种关键技【转载】
  2. VS2012/13本地发布网站详细步骤(可带数据库)
  3. dataguard如何实现切换_深度干货 | 如何借助云原生搞定Oracle备份快速恢复?
  4. 浅析多线程中的各种锁
  5. 【设计模式系列】行为型之模板模式
  6. (转)基本光照模型公式
  7. Engineer05
  8. TensorFlow实现mnist手写数字识别项目代码
  9. Elasticsearch优化原理
  10. 金山词霸2007升级v10.0.0.4
  11. LS1046A 环境搭建-LSDK快速搭建
  12. android本地视频 投屏,小米投屏神器
  13. shiro-反序列化漏洞
  14. 保险巨头安盛将推出代币众筹保险服务
  15. kgdb调试aarch64内核模块
  16. EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是hibernate中默认的CacheProvider Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通
  17. 关于Connection aborted等问题的解决
  18. 【转】JS VLC插件
  19. 【论文评审】怎样审稿?
  20. 计算机实验室主要工作业绩范文,2020年实验室工作总结范文4篇

热门文章

  1. OneThink 忘记密码 OneThink重置密码
  2. 工程勘察设计管理条例释义电子书_《建设工程勘察设计管理条例》(2015年修订)解读...
  3. java jmi的基本思想_联合库存管理(jmi)的定义及主要思想是什么
  4. 程序员 业余赚钱的六种途径(转)
  5. LINUX驱动开发(三)USB虚拟网卡
  6. 学习海康VisionMaster之模板匹配
  7. google c++编程要求及规范
  8. 操作系统:作业调度实验
  9. 安卓逆向之去除app游戏入口广告
  10. matlab实现2dpsk调制与解调,2DPSK调制与解调 matlab