请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
12
返回列表 发新帖
楼主: syydelt

五轮射门小游戏

[复制链接]

1

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2019-6-25 09:31:19 |显示全部楼层
系统安装已成功,下一步添加数据保存,读取数据功能
回复

使用道具 举报

1

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2019-7-4 12:27:25 |显示全部楼层
#定义射门/守门函数
import random
def shemen(she,shou):
    g=0
    print('现在由'+she+'射门,'+shou+'守门')
    if she==zhanghu:
        s='射'
    else:
        s='守'
    while g!='1' and g!='2':
        g=input(zhanghu+'请选择%s门的方向:' %s)
    j=random.randint(1,3)
    if int(g)!=j:
        print('哈哈!'+ she +'球进啦!')
        return 1
    else:
        print('唉!'+she+'球没进!')
        return 0

print('''               欢迎参加点球大战
射门/守门方向:1表示左边,2表示右边''')
zhanghu=input('请输入你的用户名:')

#打开历史成绩文件,比对账户,输出历史成绩,
f=open('dianqiuchengji.txt')
lines = f.readlines()
f.close()

i=0
m=-1
print (zhanghu+' 欢迎您!')
for line in lines:
    data = line.split()
    if zhanghu==data[0]:
        print('历史成绩:'+line)
        m=i
        data0=data  #记录账号序列
        break
    i +=1
if m==-1:
    print('历史成绩:空白')

   
#游戏过程
print("----------let's go--------")
jiqi=0
geren=0
i=0
while i<5 or (i>=5 and geren==jiqi):
    i +=1
    print('第'+str(i)+'轮射门开始')
    geren=geren+shemen(zhanghu,'机器')   
    print('现在'+zhanghu+'和机器的比分为  '+str(geren)+':'+str(jiqi))
    if i<=5 and (geren>jiqi+6-i or jiqi>geren+5-i):
        break
    jiqi=jiqi+shemen('机器',zhanghu)
    print('现在'+zhanghu+'和机器的比分为  '+str(geren)+':'+str(jiqi))
    if abs(geren-jiqi)+i-5>0 and i<5:
        break
chengji=str(geren)+':'+str(jiqi)
print('经过'+str(i)+'轮较量,'+zhanghu+'和机器的比分为'+chengji)
if geren>jiqi:
    print('获胜的为'+zhanghu)
else:
    print('获胜的为机器')
print('游戏结束,下次再会!')

#更新历史成绩
f=open('dianqiuchengji.txt','w')
if m==-1:
    data0=zhanghu+' '+chengji+'\n'
    print(lines)
    lines.append(data0)
    print(lines)
else:
    data0.append(chengji+'\n')
    print(lines)
    lines[m]=' '.join(data0)
    print(lines)
f.writelines(lines)
f.close()
回复

使用道具 举报

1

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2019-7-5 08:55:37 |显示全部楼层
dianqiuchengji.txt
运行前:
李尘 3:4 4:2 3:4
xiha 2:3 3:1
558 4:3 3:0 2:3
王彬 0:3 0:1 0:2 6:5 4:3
张涛 6:5
运行后:
李尘 3:4 4:2 3:4
xiha 2:3 3:1
558 4:3 3:0 2:3
王彬 0:3 0:1 0:2 6:5 4:3
张涛 6:5 3:2
西瓜 5:4

回复

使用道具 举报

1

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2019-7-5 08:56:40 |显示全部楼层
syydelt 发表于 2019-7-4 12:27
#定义射门/守门函数
import random
def shemen(she,shou):

增加成绩读取和储存功能
回复

使用道具 举报

1

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2019-7-5 08:58:09 |显示全部楼层
运行结果:  
             欢迎参加点球大战
射门/守门方向:1表示左边,2表示右边
请输入你的用户名:张涛
张涛 欢迎您!
历史成绩:张涛 6:5

----------let's go--------
第1轮射门开始
现在由张涛射门,机器守门
张涛请选择射门的方向:1
哈哈!张涛球进啦!
现在张涛和机器的比分为  1:0
现在由机器射门,张涛守门
张涛请选择守门的方向:1
哈哈!机器球进啦!
现在张涛和机器的比分为  1:1
第2轮射门开始
现在由张涛射门,机器守门
张涛请选择射门的方向:1
唉!张涛球没进!
现在张涛和机器的比分为  1:1
现在由机器射门,张涛守门
张涛请选择守门的方向:1
唉!机器球没进!
现在张涛和机器的比分为  1:1
第3轮射门开始
现在由张涛射门,机器守门
张涛请选择射门的方向:11
张涛请选择射门的方向:1
唉!张涛球没进!
现在张涛和机器的比分为  1:1
现在由机器射门,张涛守门
张涛请选择守门的方向:1
唉!机器球没进!
现在张涛和机器的比分为  1:1
第4轮射门开始
现在由张涛射门,机器守门
张涛请选择射门的方向:1
唉!张涛球没进!
现在张涛和机器的比分为  1:1
现在由机器射门,张涛守门
张涛请选择守门的方向:1
哈哈!机器球进啦!
现在张涛和机器的比分为  1:2
第5轮射门开始
现在由张涛射门,机器守门
张涛请选择射门的方向:1
哈哈!张涛球进啦!
现在张涛和机器的比分为  2:2
现在由机器射门,张涛守门
张涛请选择守门的方向:1
唉!机器球没进!
现在张涛和机器的比分为  2:2
第6轮射门开始
现在由张涛射门,机器守门
张涛请选择射门的方向:1
哈哈!张涛球进啦!
现在张涛和机器的比分为  3:2
现在由机器射门,张涛守门
张涛请选择守门的方向:1
唉!机器球没进!
现在张涛和机器的比分为  3:2
经过6轮较量,张涛和机器的比分为3:2
获胜的为张涛
游戏结束,下次再会!
['李尘 3:4 4:2 3:4\n', 'xiha 2:3 3:1\n', '558 4:3 3:0 2:3\n', '王彬 0:3 0:1 0:2 6:5 4:3\n', '张涛 6:5\n']
['李尘 3:4 4:2 3:4\n', 'xiha 2:3 3:1\n', '558 4:3 3:0 2:3\n', '王彬 0:3 0:1 0:2 6:5 4:3\n', '张涛 6:5 3:2\n']
>>>
===================== RESTART: C:\Python34\dianqiu1.4.py =====================
               欢迎参加点球大战
射门/守门方向:1表示左边,2表示右边
请输入你的用户名:西瓜
西瓜 欢迎您!
历史成绩:空白
----------let's go--------
第1轮射门开始
现在由西瓜射门,机器守门
西瓜请选择射门的方向:1
哈哈!西瓜球进啦!
现在西瓜和机器的比分为  1:0
现在由机器射门,西瓜守门
西瓜请选择守门的方向:1
哈哈!机器球进啦!
现在西瓜和机器的比分为  1:1
第2轮射门开始
现在由西瓜射门,机器守门
西瓜请选择射门的方向:1
唉!西瓜球没进!
现在西瓜和机器的比分为  1:1
现在由机器射门,西瓜守门
西瓜请选择守门的方向:2
唉!机器球没进!
现在西瓜和机器的比分为  1:1
第3轮射门开始
现在由西瓜射门,机器守门
西瓜请选择射门的方向:2
哈哈!西瓜球进啦!
现在西瓜和机器的比分为  2:1
现在由机器射门,西瓜守门
西瓜请选择守门的方向:2
哈哈!机器球进啦!
现在西瓜和机器的比分为  2:2
第4轮射门开始
现在由西瓜射门,机器守门
西瓜请选择射门的方向:1
哈哈!西瓜球进啦!
现在西瓜和机器的比分为  3:2
现在由机器射门,西瓜守门
西瓜请选择守门的方向:2
哈哈!机器球进啦!
现在西瓜和机器的比分为  3:3
第5轮射门开始
现在由西瓜射门,机器守门
西瓜请选择射门的方向:2
哈哈!西瓜球进啦!
现在西瓜和机器的比分为  4:3
现在由机器射门,西瓜守门
西瓜请选择守门的方向:22
西瓜请选择守门的方向:2
哈哈!机器球进啦!
现在西瓜和机器的比分为  4:4
第6轮射门开始
现在由西瓜射门,机器守门
西瓜请选择射门的方向:2
哈哈!西瓜球进啦!
现在西瓜和机器的比分为  5:4
现在由机器射门,西瓜守门
西瓜请选择守门的方向:2
唉!机器球没进!
现在西瓜和机器的比分为  5:4
经过6轮较量,西瓜和机器的比分为5:4
获胜的为西瓜
游戏结束,下次再会!
['李尘 3:4 4:2 3:4\n', 'xiha 2:3 3:1\n', '558 4:3 3:0 2:3\n', '王彬 0:3 0:1 0:2 6:5 4:3\n', '张涛 6:5 3:2\n']
['李尘 3:4 4:2 3:4\n', 'xiha 2:3 3:1\n', '558 4:3 3:0 2:3\n', '王彬 0:3 0:1 0:2 6:5 4:3\n', '张涛 6:5 3:2\n', '西瓜 5:4\n']
>>>
回复

使用道具 举报

1

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2019-7-5 10:55:02 |显示全部楼层
求大神指教!
1、感觉这样写比较麻烦,如果还想统计胜利的场次就更麻烦了,不知道能不能用Excel文件来储存和读取会好一些,还是多建几个文件来解决。
2、我也碰巧实现了点球成绩的存储功能,我还想问一下append这个追加结果为什么把最后一个'2:3\n'的'\n'就没有了,虽然我也想达到这个效果,是因为join吗?我在命令行输入看好像不行呀!
>>> l=['12\n']
>>> l
['12\n']
>>> l.append('13\n')
>>> l
['12\n', '13\n']
>>>
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2019-7-5 14:04:17 |显示全部楼层
syydelt 发表于 2019-7-5 10:55
求大神指教!
1、感觉这样写比较麻烦,如果还想统计胜利的场次就更麻烦了,不知道能不能用Excel文件来储存 ...

1. excel 要用专门的库。你可以用 csv 模块,和excel类似,文件可以被excel打开,处理相对方便。
还有种解决办法就是把结果直接通过 pickle 模块来存储,不用额外做字符串的转化。
你可以网上搜下这两个模块的教程例子看看

2. 代码中并不是直接往一个带 \n 的字符串列表里面追加内容。而是从文件里按行读取,然后对每一行进行split后得到的字符串列表。你在代码看一看 data0 是怎么出来的,把相关的变量输出一下,就会发现了,data0 里面是不带 \n 的。
换句话说,你从文件里 readlines 出来的文字是没有 \n 的,但你写入的时候要加个 \n
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-4-19 01:07 , Processed in 0.019146 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部