鱼C论坛

 找回密码
 立即注册
查看: 4647|回复: 17

[原创] 文字版打飞机1.0

[复制链接]
发表于 2016-12-7 23:40:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1:炮台从底层y = 1生成,左右移动 ,每次左右x轴随机移动n个位置,并且移送过的地方每一个位置都会生成一个炮弹,并发射。如果此位置Y轴正好有小飞机,则击落一架且一次只能击落,加一分。(击落多架除非下一次随机位置还在原地)

2:小飞机到底层时消失,即y = 0时候消失。

3:小飞机从顶层y = 10水平位置生成,x位置随机,每次随机生成n个

4:主飞机本身长度y=1。当炮台和小飞机下一个坐标都为(x,1)时,碰撞。游戏结束。

5:加载到核武器清屏,加到目前所有分。

6:所有操作都是电脑随机操作。
代码如下:
  1. import random as r
  2. import sys
  3. legal_x = [0,10]
  4. legal_y = [0,10]
  5. list_boom = []
  6. class Big:
  7.     def __init__(self):
  8.         """在y=1随机生成轰炸机位置"""
  9.         self.x = r.randint(0,10)
  10.         self.y = 1

  11.     def move(self):
  12.         self.Interval = []
  13.         """随机移动左右方向并移动到新的位置(x,1)"""
  14.         self.step = r.randint(0,10)
  15.         self.direction = r.randint(-1,1)#方向,-1为左,0不移动,1为右
  16.         new_x = self.x + self.direction * self.step
  17.         mew_y = self.y
  18.         """判断是否越界"""
  19.         if new_x > legal_x[1]:
  20.             pos_x = legal_x[1] - (new_x - legal_x[1])
  21.             pos_y = mew_y
  22.         elif new_x < legal_x[0]:
  23.             pos_x = legal_x[0] - new_x
  24.             pos_y = mew_y
  25.         else:
  26.             pos_x = new_x
  27.             pos_y = mew_y
  28.             
  29.         """炮台移动前后对应坐标"""
  30.         if self.x > pos_x:
  31.             for i in range(pos_x,self.x + 1 ):
  32.                 self.Interval.append(i)
  33.             print("炮台从坐标x=%d移动到x=%d,沿途轰了%d炮"%(self.x,pos_x,self.x + 1 -pos_x ))
  34.             print(">>>轰出%d个炮的位置是x ="% (self.x + 1 -pos_x),end = "")
  35.             print(self.Interval)

  36.         elif self.x < pos_x:
  37.             for i in range(self.x,pos_x + 1):
  38.                 self.Interval.append(i)
  39.             print("炮台从坐标x=%d移动到x=%d,沿途轰了%d炮"%(self.x,pos_x,pos_x + 1 -self.x ))
  40.             print(">>>轰出%d个炮的位置是x ="% (pos_x + 1 -self.x),end = "")
  41.             print(self.Interval)
  42.         else:
  43.             self.Interval.append(pos_x)
  44.             print(">>>炮台原地轰了一炮")
  45.             print(">>>轰炮的坐标是x = %s"% str(self.Interval))
  46.             
  47.         """初始化炮台到移动的目标"""
  48.         self.x = pos_x
  49.         self.y = pos_y
  50.         return (pos_x,pos_y)

  51. class Small:
  52.     def __init__(self):
  53.         """在y=10随机生成小飞机位置"""
  54.         self.x = r.randint(0,10)
  55.         self.y = 10

  56.     def move(self):
  57.         """固定移动,每次向下一步"""
  58.         new_x = self.x
  59.         mew_y = self.y - 1
  60.         """判断是否越界"""
  61.         if mew_y <= legal_y[0]:
  62.             self.x = r.randint(0,10)
  63.             self.y = 10
  64.         else:
  65.             self.x = new_x
  66.             self.y = mew_y            
  67.         return (new_x , mew_y)

  68. class Boom:
  69.     """核武器"""
  70.     def __init__(self):
  71.         self.x = r.randint(0,10)
  72.         self.y = 1

  73. def DAFEIJI(n):  
  74.     Scorer = 0
  75.     list_s = []
  76.     big_air = Big()
  77.     """炮台出场"""
  78.    
  79.     i = r.randint(3,10)
  80.     while n:
  81.         boom = Boom()
  82.         """核武器生成"""      
  83.         for each_air in range(i):
  84.             small_air = Small()#小飞机出场数量随机生成,位置也随机,所以可能与之前重叠
  85.             list_s.append(small_air)

  86.         pos = big_air.move()
  87.         n = n - 1
  88.         if pos != (boom.x ,boom.y):
  89.             for each in list_s[:]:
  90.                 if each.move() == pos:
  91.                     print(">>>>>>>很不幸! 您的炮台撞小飞机了....GG!!")#这个几率.....
  92.                     print("本次打飞机的分数是:%d" % Scorer)
  93.                     sys.exit(0)         
  94.                 if(each.move())[0] in (big_air.Interval):
  95.                     print("一架小飞机被打掉..")
  96.                     Scorer += 1
  97.                     list_s.remove(each)
  98.         else:
  99.             print("炮台加载了核武器...======================清屏!=======================..")
  100.             Scorer += len(list_s)
  101.             list_s.clear()
  102.     print("本次打飞机的分数是:%d" % Scorer)
  103. #==============================主程序==================================   
  104. DAFEIJI(200)#n为移动步数
复制代码


目前的BUG:
1:小飞机生成地方随机,量大会重叠
2:炮台时不时原地放一炮(哈哈,这个不算)

求各位大神给思路,怎么限制小飞机出生坐标和目前所有坐标不重复
==== 目前电脑随机最多打了800分  ,有兴趣的可以测试下~~哈哈

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2016-12-8 17:53:12 | 显示全部楼层
改进了已知bug
1:小飞机随机生生成地方不会重叠
2:增加了y长度可增大炮台存活时间

代码如下:
  1. import random as r
  2. import sys
  3. legal_x = [0,10]
  4. legal_y = [0,25]
  5. class Big:
  6.     def __init__(self):
  7.         """在y=1随机生成炮台位置"""
  8.         self.x = r.randint(0,10)
  9.         self.y = 1

  10.     def move(self):
  11.         self.Interval = []
  12.         """随机移动左右方向并移动到新的位置(x,1)"""
  13.         self.step = r.randint(0,legal_x[1])
  14.         self.direction = r.randint(-1,1)#方向,-1为左,0不移动,1为右
  15.         new_x = self.x + self.direction * self.step
  16.         mew_y = self.y
  17.         """判断是否越界"""
  18.         if new_x > legal_x[1]:
  19.             pos_x = legal_x[1] - (new_x - legal_x[1])
  20.             pos_y = mew_y
  21.         elif new_x < legal_x[0]:
  22.             pos_x = legal_x[0] - new_x
  23.             pos_y = mew_y
  24.         else:
  25.             pos_x = new_x
  26.             pos_y = mew_y
  27.             
  28.         """炮台移动前后对应坐标"""
  29.         if self.x > pos_x:
  30.             for i in range(pos_x,self.x + 1 ):
  31.                 self.Interval.append(i)
  32.             print("炮台从坐标x=%d移动到x=%d,沿途轰了%d炮"%(self.x,pos_x,self.x + 1 -pos_x ))
  33.             print(">>>轰出%d个炮的位置是x ="% (self.x + 1 -pos_x),end = "")
  34.             print(self.Interval)

  35.         elif self.x < pos_x:
  36.             for i in range(self.x,pos_x + 1):
  37.                 self.Interval.append(i)
  38.             print("炮台从坐标x=%d移动到x=%d,沿途轰了%d炮"%(self.x,pos_x,pos_x + 1 -self.x ))
  39.             print(">>>轰出%d个炮的位置是x ="% (pos_x + 1 -self.x),end = "")
  40.             print(self.Interval)
  41.         else:
  42.             self.Interval.append(pos_x)
  43.             print(">>>炮台原地轰了一炮")
  44.             print(">>>轰炮的坐标是x = %s"% str(self.Interval))
  45.             
  46.         """初始化炮台到移动的目标"""
  47.         self.x = pos_x
  48.         self.y = pos_y
  49.         return (pos_x,pos_y)

  50. class Small:
  51.     def __init__(self):
  52.         """在y=25随机生成小飞机位置"""
  53.         self.x = r.randint(0,legal_x[1])
  54.         self.y = legal_y[1]

  55.     def move(self):
  56.         """固定移动,每次向下一步"""
  57.         new_x = self.x
  58.         mew_y = self.y - 1
  59.         """判断是否越界"""
  60.         if mew_y <= legal_y[0]:
  61.             self.x = r.randint(0,legal_x[1])
  62.             self.y = legal_y[1]
  63.         else:
  64.             self.x = new_x
  65.             self.y = mew_y            
  66.         return (new_x , mew_y)

  67. class Boom:
  68.     """核武器"""
  69.     def __init__(self):
  70.         self.x = r.randint(0,legal_x[1])
  71.         self.y = 1

  72. def DAFEIJI(n):  
  73.     Scorer = 0
  74.     list_s = []
  75.     big_air = Big()
  76.     """激光炮台出场"""
  77.    
  78.     i = r.randint(9,10)
  79.     while n:
  80.         list_pos = []
  81.         boom = Boom()
  82.         """核武器生成"""      
  83.         for numbers in range(1 ,i + 1):            
  84.             small_air = Small()#小飞机出场数量位置随机,设置不重叠
  85.             if small_air.x not in list_pos:
  86.                 list_pos.append(small_air.x)
  87.                 list_s.append(small_air)
  88.             else:
  89.                 continue               
  90.         pos = big_air.move()
  91.         n = n - 1
  92.         if pos != (boom.x ,boom.y):
  93.             for each in list_s[:]:
  94.                 pos_small = each.move()
  95.                 if pos == pos_small:
  96.                     print(">>>>>>>很不幸! 您的炮台撞小飞机了....GG!!")#这个几率.....
  97.                     print("本次打飞机的分数是:%d" % Scorer)
  98.                     sys.exit(0)         
  99.                 elif pos_small[0] in (big_air.Interval):
  100.                     """一条直线打的,其实是激光炮"""
  101.                     print("一架小飞机被打掉..")
  102.                     Scorer += 1
  103.                     list_s.remove(each)
  104.         else:
  105.             print("炮台加载了核武器...======================清屏!=======================..")
  106.             Scorer += len(list_s)
  107.             list_s.clear()
  108.     print("本次打飞机的分数是:%d" % Scorer)
  109. #==============================主程序==================================
  110.    
  111. DAFEIJI(50)
复制代码

@小茗同学 @小甲鱼 0基础的成果,求指导一个问题:
这样的炮台其实是激光炮,会扫射一条直线所有的飞机。
请问怎么修改,才可以让炮台只打距离他第一个小飞机,而不是一条直线是全扫了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 09:06:12 | 显示全部楼层
厉害了,学习学习!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 09:34:43 | 显示全部楼层
还真是厉害,我还没有研究过这个小程序呢,恐怕现在好多东西要向你学习呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-9 14:35:21 | 显示全部楼层
小茗同学 发表于 2016-12-9 09:34
还真是厉害,我还没有研究过这个小程序呢,恐怕现在好多东西要向你学习呢

没有没有 多指教。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 19:12:46 | 显示全部楼层
这个好啊,留着学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-12 10:41:38 | 显示全部楼层
向楼主大大学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-14 08:59:04 | 显示全部楼层
好厉害!向楼主学习~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-15 23:06:11 | 显示全部楼层
为何如此污 我喜欢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-18 20:35:44 | 显示全部楼层
天呐!!大神!!你是都学完之后做出来的吗!!啊。打飞机是我现在的目标
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-18 20:39:03 | 显示全部楼层
wdyx491 发表于 2016-12-18 20:35
天呐!!大神!!你是都学完之后做出来的吗!!啊。打飞机是我现在的目标{: ...

现在还没学完呢 这是第38课的时候写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-18 21:08:07 | 显示全部楼层
zua 发表于 2016-12-18 20:39
现在还没学完呢 这是第38课的时候写的

噢噢噢噢!!好激动!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-20 23:30:01 | 显示全部楼层
赞一下,感觉很不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-22 09:28:38 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-26 22:24:58 | 显示全部楼层
膜拜大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-28 01:33:58 | 显示全部楼层
111
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-19 10:21:47 | 显示全部楼层
太强大了,只能仰视.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-28 17:48:51 From FishC Mobile | 显示全部楼层
so nb
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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