吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2320|回复: 34
收起左侧

[Python 转载] 走过路过进来看看,共同学习

  [复制链接]
lingyiling 发表于 2020-7-26 23:34
本帖最后由 lingyiling 于 2020-7-30 00:32 编辑

第一次发帖还有点紧张,最近在跟别的网站学python 写了段很菜的小程序。



《小乌龟吃小鱼》{:1_918:}



听名字  刚学python的同学们肯定都知道我在哪自学的了哈
但是具体实现功能还是能唠两句的:


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

以上是实现程序的基本功能。



写程序之前我们先来理一下思路:
范围是10*10的方格内
移动方向随机
两种生物 乌龟和鱼

乌龟移动1-2步
鱼移动1步
乌龟有体力吃鱼增加体力但有上限
鱼没有体力

PS;提前报告有部分功能没有实现还在摸索中

以下是部分程序:
程序比较简单只用到了一个模块random
生成随机数字

import random



一:
习惯性先写入口函数main()
二.0:
首先创建一个动物类
因为乌龟有体力,class没有分开写所以添加了体力
默认名字999
随机xy

class Animal():
    tili = 100
    x = random.randint(0,10)
    y = random.randint(0,10)
    name = 999
二.1:
初始化定义类成鱼还是乌龟还是外星生物(手动狗头)

def init(self,name):
if name == '乌龟':
self.name = 0
elif name == '鱼':
self.name = 1
else:
print('出错')
exit



二.2:
题中出现边缘反弹的当时想了好久用到了abs绝对值
变量z随机x还是y
变量fuhao随机正负
如果原运算结果小于0 则取绝对值
如果原运算结果大于10则相减取绝对值
def move(self):
        z = random.randint(0,1)
        fuhao = random.randint(0,1)
        if z == 0:
            if fuhao == 0:
                self.x = self.x - random.randint(1,2)
                if self.x < 0:
                    self.x = abs(self.x)
            else:
                self.x = self.x + random.randint(1,2)
                if self.x > 10:
                    self.x = 10 - (self.x - 10)
        else:
            if fuhao == 0:
                self.y = self.y - random.randint(1,2)
                if self.y < 0:
                    self.y = abs(self.y)
            else:
                self.y = self.y + random.randint(1,2)
                if self.y > 10:
                    self.y = 10 - (self.y - 10)

二.3:
虽然鱼没有体力,但是乌龟有呀,所以这个大类中添加了一项关于体力
传入参数1,0
1吃到
0没吃到
def power(self,chidao = 99):
        if chidao == 1:
            print("呀,吃到了")
            self.tili += 20
            chidao = 99
        elif chidao == 0:
            self.tili -= 1
            chidao = 99
            if self.tili == 0:
                return False
        return self.tili


二.4:
下一项获取位置,把当前位置返回出去,主函数中判断是否重叠,乌龟是否抓到鱼

def get_X_Y(self):

self.x = 0

    # self.y = 1
    weizhi = [self.x,self.y]
    return weizhi


二.5:
最后关于显示问题应该不大,这里我把随机移动的函数直接写在显示里运行了,这样写可能有点不太合理,你们觉得呢?
def print_xy(self):
        self.move()
        if self.name == 0:
            print("%s的位置是(%s,%s),体力为%s" % (str(self.name),str(self.x),str(self.y),str(self.tili)))
        if self.name == 1:
            print("%s的位置是(%s,%s)" % (str(self.name),str(self.x),str(self.y)))
        return self.get_X_Y()


大类写完接下来就是主函数了

三.1
首先实例化一个乌龟
考虑到鱼不是一条是一群所以循环实例化到列表中
初始化完成
    # 实例化乌龟
    gui = Animal('乌龟')
    yuqun = []
    # 实例化鱼
    for i in range(0,10):
        yuqun.append('yu' + str(i))
        yuqun[i] = Animal('鱼')


三.2
接下来就是运行的主核心了
循环主体直到鱼塘没有鱼或者乌龟没有体力
创建一个临时列表count来存放吃到的鱼儿再在循环结束之后统一删除
因为在循环中直接删除会报NULL的错误
最后判断打印结束

while gui.power() > 0 and len(yuqun) > 0:
        count = []
        gui.power(chidao=0)
        gui_weizhi = gui.print_xy()
        for i in range(0,len(yuqun)):
            weizhi = yuqun[i].print_xy()
            if(gui_weizhi == weizhi):
                gui.power(chidao=1)
                count.append(str(i))
        if(len(count) > 0):
            for i in range(0,len(count)):
                del yuqun[i]
    if gui.power() ==0:
        print("乌龟输了,还剩下%s条鱼没抓到"%len(yuqun))
    if len(yuqun) == 0:
        print("鱼全吃完了")




以上是全部内容,感觉有些功能没实现(乌龟移动1-2步),而有些段落又比较多余(鱼不需要体力),还有些没有发现的问题,请大家帮忙指出,后期可能会听取意见或建议更新新版本谢谢

框架图

框架图

免费评分

参与人数 7吾爱币 +7 热心值 +7 收起 理由
诛仙之恋 + 1 + 1 谢谢@Thanks!
wangyuyan + 1 + 1 热心回复!
secondDog + 1 + 1 热心回复!
修哥 + 1 + 1 用心讨论,共获提升!
youmo518 + 1 + 1 用心讨论,共获提升!
vethenc + 1 + 1 用心讨论,共获提升!
joneqm + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| lingyiling 发表于 2020-7-27 09:46

那正好一起学习,边学边用,可以看下我的程序有没有可以优化的地方
 楼主| lingyiling 发表于 2020-7-27 09:36
ayaoko 发表于 2020-7-27 07:55
现在就是什么都要学习,什么都学习了,感觉什么都不会了,c++,python ,java,go,Rust......

现在是全民学编程   哈哈
而且发展趋势越来越低年段
同事家的小孩儿5年级就在学python了

我们也要抓紧!
hj185769 发表于 2020-7-27 03:15
xll52pojie 发表于 2020-7-27 04:11
共同学习
whofly 发表于 2020-7-27 07:43
学习 不断突破
Dxide 发表于 2020-7-27 07:47
共同学习
ayaoko 发表于 2020-7-27 07:55
现在就是什么都要学习,什么都学习了,感觉什么都不会了,c++,python ,java,go,Rust......
过林黑马 发表于 2020-7-27 07:57
厉害了,还能做出来游戏了
Rubyao 发表于 2020-7-27 08:03
路过支持楼主。厉害&#128077;&#127995;
vethenc 发表于 2020-7-27 08:18
感谢分享
lypxynok 发表于 2020-7-27 08:18
一起学习,一起进步
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 02:56

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表