python小游戏1:大鱼吃小鱼
总目标:实现大鱼吃小鱼游戏
功能概括:
- 鼠标控制鱼的游动:运动方向的改变和鱼头朝向(即图片旋转角度)的改变。
- npc鱼的生命进程:随机从左或右,在随机高度生成随机品种的npc鱼。被吃或游出画面外时内存释放。
- 吃鱼:用玩家鱼和npc鱼的间距是否低于某值作为判断标准
# 大鱼吃小鱼import pygame
import random
from pygame.locals import *
from pygame.math import *
from sys import exit# 图片资源加载
background = pygame.image.load("drawable/fishgame/background.png") # 图片-背景
img_fish = pygame.image.load("drawable/fishgame/thefish.png") # 图片-玩家操控的鱼
img_small = pygame.image.load("drawable/fishgame/small.png") # 图片-小鱼
img_middle1 = pygame.image.load("drawable/fishgame/middle1.png") # 图片-中鱼1
img_middle2 = pygame.image.load("drawable/fishgame/middle2.png") # 图片-中鱼2
img_big1 = pygame.image.load("drawable/fishgame/big1.png") # 图片-大鱼1
img_big2 = pygame.image.load("drawable/fishgame/big2.png") # 图片-大鱼2
img_shark = pygame.image.load("drawable/fishgame/shark.png") # 图片-鲨鱼# 图片资源处理
new_fish = pygame.transform.rotozoom(img_fish,180,0.2) # 图片旋转180°,并缩放为原来的0.2倍new_small1 = pygame.transform.rotozoom(img_small,180,0.18) # 图片旋转180°,缩放为原来的0.18倍。并生成水平翻转的图片2
new_small2 = pygame.transform.rotozoom(img_small,0,0.18)new_middle12 = pygame.transform.rotozoom(img_middle1,0,0.35) # 图片旋转180°,缩放为原来的0.35倍。并生成水平翻转的图片2
new_middle11 = pygame.transform.flip(new_middle12,1,0)
new_middle22 = pygame.transform.rotozoom(img_middle2,0,0.35)
new_middle21 = pygame.transform.flip(new_middle22,1,0)new_big12 = pygame.transform.rotozoom(img_big1,0,0.6)
new_big11 = pygame.transform.flip(new_big12,1,0)
new_big22 = pygame.transform.rotozoom(img_big2,0,0.6)
new_big21 = pygame.transform.flip(new_big22,1,0)new_shark1 = pygame.transform.rotozoom(img_shark,0,1.2)
new_shark2 = pygame.transform.flip(new_shark1,1,0)pygame.init() # 启动screen = pygame.display.set_mode((1000, 500), 0, 0) # 设置屏幕
pygame.display.set_caption("大鱼吃小鱼21.10.5") # 设置标题
clock = pygame.time.Clock() # 设置时钟sp = Vector2(480,240) # 小鱼坐标为二维向量sp
speed = 3.0 # 速度为三个单位
mouse_xy = (480,240)
distanse = Vector2(0,0)
fish_dir = Vector2(-1,0)
time_i=0
fish_list=[] #四维数组:x,y,方向,品种
npc_fish=[]while True:clock.tick_busy_loop(60)time_i=time_i+1screen.blit(background, (0, 0)) # 背景图片if time_i%100 == 0:ram_num1=random.randint(0,1) # 左右随机数ram_num2=random.randint(1,20) # 品种随机数:smal-12,midle-5,big-2,shark-1if ram_num1 == 1:npc_fish.append("left")else:npc_fish.append("right")if ram_num2 == 1:npc_fish.append("shark")elif ram_num2 >= 2 | ram_num2 <= 3:npc_fish.append("big1")elif ram_num2 >= 4 | ram_num2 <= 5:npc_fish.append("big2")elif ram_num2 >= 6 | ram_num2 <= 8:npc_fish.append("middle1")elif ram_num2 >= 9 | ram_num2 <= 11 :npc_fish.append("middle2")else:npc_fish.append("small")if npc_fish[0]=="left":npc_fish.append(0)else:npc_fish.append(1000)npc_fish.append(random.randint(0,380))fish_list.append(npc_fish)print(npc_fish)npc_fish=[]for fish in fish_list:if fish[1] == "small":if fish[0] == "left":screen.blit(new_small1,(fish[2],fish[3]))else:screen.blit(new_small2,(fish[2],fish[3]))if fish[1] == "middle1":if fish[0] == "left":screen.blit(new_middle11,(fish[2],fish[3]))else:screen.blit(new_middle12,(fish[2],fish[3]))if fish[1] == "middle2":if fish[0] == "left":screen.blit(new_middle21,(fish[2],fish[3]))else:screen.blit(new_middle22,(fish[2],fish[3]))if fish[1] == "big1":if fish[0] == "left":screen.blit(new_big11,(fish[2],fish[3]))else:screen.blit(new_big12,(fish[2],fish[3]))if fish[1] == "big2":if fish[0] == "left":screen.blit(new_big21,(fish[2],fish[3]))else:screen.blit(new_big22,(fish[2],fish[3]))if fish[1] == "shark":if fish[0] == "left":screen.blit(new_shark1,(fish[2],fish[3]))else:screen.blit(new_shark2,(fish[2],fish[3]))if fish[0] == "left":fish[2] = fish[2] + 1if fish[2] == 1000:fish_list.remove(fish)else:fish[2] = fish[2] - 1if fish[2] == -200:fish_list.remove(fish)distanse = mouse_xy - spdis_len=distanse.length()if dis_len < speed:mouse_xy=spelif dis_len != 0:distanse.normalize_ip()distanse=distanse*speedsp+=distansefor fish in fish_list:fish_pos=Vector2(fish[2],fish[3])distanse2 = sp - fish_posif distanse2.length() <= 100:img_fish = pygame.transform.rotozoom(img_fish,0,1.1)fish_list.remove(fish)for event in pygame.event.get():if event.type == MOUSEBUTTONDOWN:mouse_xy=Vector2(event.pos)distanse = mouse_xy - spangle = distanse.angle_to(fish_dir)new_fish = pygame.transform.rotozoom(img_fish,angle,0.2)if event.type == QUIT:exit()screen.blit(new_fish, sp) pygame.display.update()
效果:
感言:这是我第一次做出一个小游戏,虽然还有很多很多不足,但挺有成就感的。
python小游戏1:大鱼吃小鱼相关推荐
- python编的俄罗斯方块游戏_手把手制作Python小游戏:俄罗斯方块(一)
手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...
- python简单小游戏代码_一个简单的python小游戏---七彩同心圆
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 用pygame做一个简单的python小游戏-七彩同心圆 玩法:每次点击鼠标时,会以鼠标为圆心,不断 ...
- python图形小游戏代码_手把手制作Python小游戏:俄罗斯方块(一)
手把手制作Python小游戏:俄罗斯方块1 大家好,新手第一次写文章,请多多指教 A.准备工作: 这里我们运用的是Pygame库,因为Python没有内置,所以需要下载 如果没有pygame,可以到官 ...
- python小游戏之三
猜拳游戏 Python代码实现猜拳小游戏 Python代码实现猜拳小游戏_zhangtongyuan0909的博客-CSDN博客_python猜拳游戏代码 用python中类与对象写一个猜拳游戏 用p ...
- python小游戏-16行代码实现3D撞球小游戏!-源码下载
python小游戏-16行代码实现3D撞球小游戏!-源码下载 所属网站分类: 资源下载 > python小游戏 作者:搞笑 链接: http://www.pythonheidong.com/bl ...
- python小游戏编程arcade----坦克动画图片合成
python小游戏编程arcade----坦克动画图片合成 前言 坦克动画图片合成 1.PIL image 1.1 读取文件并转换 1.2 裁切,粘贴 1.3 效果图 1.4 代码实现 2.处理图片的 ...
- 用pygame做一个简单的python小游戏---贪吃蛇
用pygame做一个简单的python小游戏-贪吃蛇 贪吃蛇游戏博客链接:(方法一样,语言不一样) c++贪吃蛇:https://blog.csdn.net/weixin_46791942/artic ...
- 用pygame做一个简单的python小游戏---七彩同心圆
用pygame做一个简单的python小游戏-七彩同心圆 这个小游戏原是我同学python课的课后作业,并不是很难,就简单实现了一下,顺便加强一下pygame库的学习. 玩法:每次点击鼠标时,会以鼠标 ...
- 用pygame做一个简单的python小游戏---生命游戏
用pygame做一个简单的python小游戏-生命游戏 生命游戏(Game of Life) 生命游戏(Game of Life)是剑桥大学约翰·何顿·康威(John Horton Conway)教授 ...
- Python小游戏——王校长的S8冠军奖杯【下】
[前情提要] 1.pygame的安装:https://blog.csdn.net/Xiaomo_haa/article/details/83962300 2.Python小游戏--王校长的S8冠军奖杯 ...
最新文章
- EfficientNetV2 笔记
- CNN for Semantic Segmentation(语义分割,论文,代码,数据集,标注工具,blog)
- 简单排序--冒泡排序
- 自动化测试pytest测试框架实例
- python中re怎么念_Python中re(正则表达式)模块学习
- 如何获取foreach循环当前迭代的索引?
- Asp.net Web Api 路由 和 异常处理
- HDU 6188 2017广西邀请赛:Duizi and Shunzi
- 国庆在家太无聊, 用Java爬了上千张小姐姐照片...
- Windows应用程序组成及编程步骤
- Arcgis for Js实现graphiclayer的空间查询(续)
- 关于指针的一些基本常识
- JMM(Java内存模型)详解
- 服务器数据收发测试软件,sokit TCP/UDP 数据包收发测试(调试)工具(Win32)
- Cts框架解析(19)-设备状态的分类以及恢复模式的分类
- css before 箭头,伪元素beforeafter以及制作三角箭头
- 主梁弹性模量计算_各排立杆传至梁上荷载标准值、设计值是那一个数据
- windows下 利用CoreAudio,Libmad,和3D环绕音效原理实现的MP3播放器
- FCPX插件:视频去闪烁插件DEFlicker安装教程
- python输入n个数、输出最小的数字_程序查找最少的斐波纳契数以在Python中加到n?...