Crossin的编程教室

标题: 五轮射门小游戏 [打印本页]

作者: syydelt    时间: 2019-6-18 10:26
标题: 五轮射门小游戏
zhanghu=input('请输入你的用户名:')
print('射门方向:1表示左边,2表示右边')
jiqi=0
geren=0
import random
for i in range(5):
    g=0
    while g!='1' and g!='2':
        g=input('请选择射门的方向:')
    j=random.randint(1,3)
    if int(g)!=j:
        geren +=1
        print(zhanghu+"第"+str(i+1)+"次射门成功,得一分!")
    else:
        print(zhanghu+"第"+str(i+1)+"次射门失败,继续加油!")
    print('现在'+zhanghu+'和机器的比分为'+str(geren)+':'+str(jiqi))
作者: syydelt    时间: 2019-6-18 10:27
努力更新
作者: crossin先生    时间: 2019-6-18 11:04
syydelt 发表于 2019-6-18 10:27
努力更新

手动点赞支持
作者: syydelt    时间: 2019-6-18 15:40
本帖最后由 syydelt 于 2019-6-18 19:01 编辑

zhanghu=input('请输入你的用户名:')
print('射门/守门方向:1表示左边,2表示右边')
jiqi=0
geren=0
i=0
import random
while i<5 or (i>=5 and geren==jiqi):
    i +=1
    g=0
    print('现在由'+zhanghu+'射门,机器守门')
    while g!='1' and g!='2':
        g=input(zhanghu+'请选择射门的方向:')
    j=random.randint(1,3)
    if int(g)!=j:
        geren +=1
        print(zhanghu+"第"+str(i)+"轮射门成功,得一分!")
    else:        
        print(zhanghu+"第"+str(i)+"轮射门失败,继续加油!")
    print('现在'+zhanghu+'和机器的比分为'+str(geren)+':'+str(jiqi))
    print('现在由机器射门'+zhanghu+'守门')
    g=0
    while g!='1' and g!='2':
        g=input(zhanghu+'请选择守门的方向:')
    j=random.randint(1,3)
    if int(g)==j:      
        print(zhanghu+"第"+str(i)+"轮守门成功!")
    else:
        jiqi +=1     
        print(zhanghu+"第"+str(i)+"轮守门失败!,机器得一分")
    print('现在'+zhanghu+'和机器的比分为'+str(geren)+':'+str(jiqi))
    if abs(geren-jiqi)+i-5>0 and i<5:
        break
print('经过'+str(i)+'轮pk,'+zhanghu+'和机器的比分为'+str(geren)+':'+str(jiqi))
if geren>jiqi:
    print('获胜的为'+zhanghu)
else:
    print('获胜的为机器')
print('游戏结束,下次再会!')

作者: syydelt    时间: 2019-6-18 16:23
crossin先生 发表于 2019-6-18 11:04
手动点赞支持

谢谢鼓励!
作者: syydelt    时间: 2019-6-19 15:53
勉强修改好了!就是太麻烦了,努力简化
作者: syydelt    时间: 2019-6-19 15:54
zhanghu=input('请输入你的用户名:')
print('射门/守门方向:1表示左边,2表示右边')
jiqi=0
geren=0
i=0
import random
while i<5 or (i>=5 and geren==jiqi):
    i +=1
    g=0
    print('现在由'+zhanghu+'射门,机器守门')
    while g!='1' and g!='2':
        g=input(zhanghu+'请选择射门的方向:')
    j=random.randint(1,3)
    if int(g)!=j:
        geren +=1
        print(zhanghu+"第"+str(i)+"轮射门成功,得一分!")
    else:        
        print(zhanghu+"第"+str(i)+"轮射门失败,继续加油!")
    print('现在'+zhanghu+'和机器的比分为'+str(geren)+':'+str(jiqi))
    if i<=5 and (geren>jiqi+6-i or jiqi>geren+5-i):
        break
    print('现在由机器射门'+zhanghu+'守门')
    g=0
    while g!='1' and g!='2':
        g=input(zhanghu+'请选择守门的方向:')
    j=random.randint(1,3)
    if int(g)==j:      
        print(zhanghu+"第"+str(i)+"轮守门成功!")
    else:
        jiqi +=1     
        print(zhanghu+"第"+str(i)+"轮守门失败!,机器得一分")
    print('现在'+zhanghu+'和机器的比分为'+str(geren)+':'+str(jiqi))
    if abs(geren-jiqi)+i-5>0 and i<5:
        break
print('经过'+str(i)+'轮较量,'+zhanghu+'和机器的比分为'+str(geren)+':'+str(jiqi))
if geren>jiqi:
    print('获胜的为'+zhanghu)
else:
    print('获胜的为机器')
print('游戏结束,下次再会!')
作者: syydelt    时间: 2019-6-19 20:03
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
zhanghu=input('请输入你的用户名:')
print('射门/守门方向:1表示左边,2表示右边')
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
print('经过'+str(i)+'轮较量,'+zhanghu+'和机器的比分为'+str(geren)+':'+str(jiqi))
if geren>jiqi:
    print('获胜的为'+zhanghu)
else:
    print('获胜的为机器')
print('游戏结束,下次再会!')
作者: syydelt    时间: 2019-6-19 20:05
增加了一个射门的函数,射进返回1,不射进返回0。
作者: syydelt    时间: 2019-6-25 09:29
本帖最后由 syydelt 于 2019-6-25 09:32 编辑

>>>
===================== RESTART: C:\Python34\dianqiu1.3.py =====================

请输入你的用户名:xiha
射门/守门方向:1表示左边,2表示右边
第1轮射门开始
现在由xiha射门,机器守门
xiha请选择射门的方向:d
xiha请选择射门的方向:1
哈哈!xiha球进啦!
现在xiha和机器的比分为1:0
现在由机器射门,xiha守门
xiha请选择守门的方向:2
唉!机器球没进!
现在xiha和机器的比分为1:0
第2轮射门开始
现在由xiha射门,机器守门
xiha请选择射门的方向:2
哈哈!xiha球进啦!
现在xiha和机器的比分为2:0
现在由机器射门,xiha守门
xiha请选择守门的方向:2
唉!机器球没进!
现在xiha和机器的比分为2:0
第3轮射门开始
现在由xiha射门,机器守门
xiha请选择射门的方向:2
哈哈!xiha球进啦!
现在xiha和机器的比分为3:0
现在由机器射门,xiha守门
xiha请选择守门的方向:2
哈哈!机器球进啦!
现在xiha和机器的比分为3:1
第4轮射门开始
现在由xiha射门,机器守门
xiha请选择射门的方向:2
唉!xiha球没进!
现在xiha和机器的比分为3:1
现在由机器射门,xiha守门
xiha请选择守门的方向:
xiha请选择守门的方向:2
唉!机器球没进!
现在xiha和机器的比分为3:1
经过4轮较量,xiha和机器的比分为3:1
获胜的为xiha
游戏结束,下次再会!
>>>
作者: syydelt    时间: 2019-6-25 09:31
系统安装已成功,下一步添加数据保存,读取数据功能
作者: syydelt    时间: 2019-7-4 12:27
#定义射门/守门函数
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()

作者: syydelt    时间: 2019-7-5 08:55
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


作者: syydelt    时间: 2019-7-5 08:56
syydelt 发表于 2019-7-4 12:27
#定义射门/守门函数
import random
def shemen(she,shou):

增加成绩读取和储存功能
作者: syydelt    时间: 2019-7-5 08:58
运行结果:  
             欢迎参加点球大战
射门/守门方向: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']
>>>
作者: syydelt    时间: 2019-7-5 10:55
求大神指教!
1、感觉这样写比较麻烦,如果还想统计胜利的场次就更麻烦了,不知道能不能用Excel文件来储存和读取会好一些,还是多建几个文件来解决。
2、我也碰巧实现了点球成绩的存储功能,我还想问一下append这个追加结果为什么把最后一个'2:3\n'的'\n'就没有了,虽然我也想达到这个效果,是因为join吗?我在命令行输入看好像不行呀!
>>> l=['12\n']
>>> l
['12\n']
>>> l.append('13\n')
>>> l
['12\n', '13\n']
>>>

作者: crossin先生    时间: 2019-7-5 14:04
syydelt 发表于 2019-7-5 10:55
求大神指教!
1、感觉这样写比较麻烦,如果还想统计胜利的场次就更麻烦了,不知道能不能用Excel文件来储存 ...

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

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




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5