IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python类和对象编写一个小游戏【含注释】 -> 正文阅读

[Python知识库]Python类和对象编写一个小游戏【含注释】

定义一个鱼类和龟类并编写游戏

  • 假设游戏场景为范围(x, y)为0<=x<=10,0<=y<=10
  • 游戏生成1只乌龟和10条鱼
  • 它们的移动方向均随机
  • 乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1
  • 当移动到场景边缘,自动向反方向移动
  • 乌龟初始化体力为100(上限)
  • 乌龟每移动一次,体力消耗1
  • 当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
  • 鱼暂不计算体力
import random as r

old_x=[0,10]
old_y=[0,10]
class Turtle:
    def __init__(self):
        #每定义一个都要前面用self识别
        self.power=100
        #初始位置随机,(注意调用randint前有r)

        #????疑问为什么是old_x[1],new_x[1]
        #####解答:本人脑瓜子抽了,看列表索引值1代表10
        self.x=r.randint(old_x[0],old_x[1])
        self.y=r.randint(old_y[0],old_y[1])
    def move(self):
        #乌龟是移动1或2,随机移动,因此用列表定义比产生随机数简单
        #choice()从一个列表,元组或字符串返回一个随机项
        new_x=self.x+r.choice([-1,-2,1,2])
        new_y=self.y+r.choice([1,2,-1,-2])
        #横向移动不超过边界
        #关于为什么将old_x[0]和old_x[10]做边框而不是数值做边框的思考:这个游戏是定义在列表所在的存储空间内的,单纯的数值与列表的数值不是同一个存储空间
        if new_x>old_x[1]:
            self.x=old_x[1]-(new_x-old_x[1])
        elif new_x<old_x[0]:
            self.x=old_x[0]-(new_x-old_x[0])
        else:
            self.x=new_x
        # new_x=old_x出现了问题,原来最后的位置还是self.x,调用函数也要是self.x

        #纵坐标不超过边界与横坐标一样
        if new_y>old_y[1]:
            self.y=old_y[1]-(new_y-old_y[1])
        elif new_y<old_y[0]:
            self.y=old_y[0]-(new_y-old_y[0])
        else:
            self.y=new_y

        self.power-=1
        return (self.x,self.y)
    def eat(self):
        self.power+=20
        if self.power>100:
            self.power=100

#鱼的移动与乌龟大致类似了
class Fish:
    #class要小写
     def __init__(self):
        self.x=r.randint(old_x[0],old_x[1])
        self.y=r.randint(old_y[0],old_y[1])
     def move(self):
        new_x=self.x+r.choice([-1,1])
        new_y=self.y+r.choice([1,-1,])
        if new_x>old_x[1]:
            self.x=old_x[1]-(new_x-old_x[1])
        elif new_x<old_x[0]:
            self.x=old_x[0]-(new_x-old_x[0])
        else:
            self.x=new_x
        if new_y>old_y[1]:
            self.y=old_y[1]-(new_y-old_y[1])
        elif new_y<old_y[0]:
            self.y=old_y[0]-(new_y-old_y[0])
        else:
            self.y=new_y
        return (self.x,self.y)

turtle=Turtle()
#定义一个空列表
fish=[]
for i in range(10):
    #定义了10条鱼
    new_fish=Fish()
    fish.append(new_fish)
    #将十条鱼的坐标最终都添加到空列表里面

while True:
    #再再强调一遍,True一定要首字母大写
    if not len(fish):
        print("鱼吃完了,游戏结束!")
        break
    if not turtle.power:
        print("乌龟体力耗尽,挂掉了")
        break

#最终有些鱼是要被吃掉的
    pos=turtle.move()
    # 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
    # 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了
    for each_fish in fish[:]:
    #fish[:]包含了全部列表
    #each_fish 10个中的任一条
        if each_fish.move()==pos:
        #鱼和乌龟位置相同
            turtle.eat()
            fish.remove(each_fish)
        #删除此鱼
            print("有一条鱼被吃掉了")

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 16:42:32  更:2021-12-02 16:43:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:31:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码