20211121杨博川《Python程序设计》实验四报告

学号 20211121《Python程序设计》实验四报告

课程:《Python程序设计》
班级: 2111
姓名: 杨博川
学号:20211121
实验教师:王志强
实验日期:2022年5月26日
必修/选修: 公选课

1.实验内容

Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
我选择了运用所学知识和自己的理解制作了一个简易的游戏盒子,包含三款小游戏可供玩家选择。

2.实验过程及结果

2.1.程序简介

2.1.1登陆装置

  首先设置一个简单的登陆装置为主体大框架,可自己设置账户密码并登录,切换游戏需重新登录


登陆后进入游戏选择界面

2.1.2游戏选择装置

  首先,为了增加盒子的真实感与节奏感,设置时间加载装置

  然后展示选择装置,选择后跳入各个游戏中

2.1.3游戏简介

2.1.3.1猜大小游戏

  游戏总体较复杂,可玩性较高,将根据用户年龄不同给予不同难度,并允许使用各类道具进行游戏,结束后将回到登陆界面

  根据年龄给予不同初始金币
  介绍游戏规则

  游戏过程中,玩家金币数将会动态变化,并可以使用多种道具,可玩性较强


  最后结束将会返回登陆界面

2.1.3.2猜拳游戏

朴实无华的人机对弈猜拳游戏,亮点是在游戏中增添了可以随时查看积分的程序,具体介绍在图片中程序逻辑较简单,不赘述。


  最后结束将会返回登陆界面

2.1.3.3数字炸弹游戏

  灵感来自于初识python这一朋友时,老师教的猜数游戏,我将其改造成了互动性较高的人机对弈数字炸弹游戏,游戏玩法较简单,不赘述。


  最后结束将会返回登陆界面

2.1.4重选模块

  若玩家不想开始选中游戏,则可重新进入盒子选择

2.2源代码

点击查看代码
init_username = input("Master,please enter initial username:")
init_password = input("Master,please enter initial password:")
flag0 = 0
flag1 = 0
print("\n")
print("\n")
print("\n")
print("\n")
print("\n")
print("\n")
print(">>>User Login<<<")

def shuzizhadan():
    result = input('是否开始游戏 yes or no :  ')

    if (result.lower() == 'yes'):
        import random
        import time

        bomb = random.randint(1, 999)
        print(bomb)
        start = 0
        end = 999
        while 1 == 1:

            people = int(input('请输入{}到{}之间的数:'.format(start, end)))
            if people > bomb:
                print('大了')
                end = people
            elif people < bomb:
                print('小了')
                start = people
            else:
                print('BOOM!!!')
                break
            print('等待电脑了输入{}到{}之间的数:'.format(start, end))
            time.sleep(1)
            com = random.randint(start + 1, end - 1)
            print('电脑输入:{}'.format(com))
            if com > bomb:
                print('大了')
                end = com
            elif com < bomb:
                print('小了')
                start = com
            else:
                print('BOOM!!!')
                break
    else:
        youxi1()


def youxi():
    import time
    t = 500
    for n in range(t + 1):
        loading = round(n / t * 100)
        print(f"\r游戏盒子加载中....   {loading}%", end="")
        time.sleep(0.0001)
    print('小游戏盒子'.center(50, '*'))
    print('*'.ljust(53, ' '), '*')
    print('*', end='')
    print("1.猜拳游戏".center(49), end='')
    print('*')
    print('\n')
    print('*', end='')
    print("2.猜大小 ".center(49), end='')
    print('*')
    print('\n')
    print('*', end='')
    print("3.数字炸弹 ".center(49), end='')
    print(' *')
    print('*'.ljust(53, ' '), '*')
    print('*' * 54)
    s = int(input("\n请选择一个游戏(输入0退出小游戏盒子T_T):"))
    if s == 2:
        print('-----猜大小-----')
        caidaxiao()
    elif s == 1:
        print('---猜拳游戏----')
        caiquan()
    elif s == 3:
        print('-----数字炸弹-----')
        shuzizhadan()
    else:
        print('即将退出游戏盒子,欢迎下次游玩!')
        exit()


def caidaxiao():
    import time
    import random
    age = int(input('您好,请输入您年龄:'))
    user_info = {'name': usr, 'age': age}
    user_properties = ['X3 x1-5']
    properties = ['X3 (250G)', 'X1-5 (300G)']


    if 10 < user_info['age'] < 18:
        glod = 1000
    elif 18 <= user_info['age'] <= 30:
        glod = 1100
    else:
        glod = 500
    user_info['glod'] = glod


    print("{}您好,欢迎游玩本游戏,您的初始金币为:{}".format(user_info['name'], user_info['glod']))
    print("\n")
    time.sleep(1)
    print('游戏说明'.center(50, '*'))
    print('*'.ljust(53, ' '), '*')
    print('*', end='')
    print("电脑每次投掷三枚骰子,总点数>=10为大,否则为小".center(32), end='')
    print('*')
    print('*'.ljust(53, ' '), '*')
    print('*' * 54)
    print("\n")


    result = input('是否开始游戏 yes or no :  ')

    if (result.lower() == 'yes'):
        while True:
            dices = []
            for i in range(0, 3):
                dices.append(random.randint(1, 6))
            total = sum(dices)
            user_input = input('请输入big OR small : ')
            u_input = user_input.strip().lower()
            time.sleep(1)
            print('骰子点数为:{}'.format(dices), end=' ')
            if (total >= 10 and u_input == 'big') or (total < 10 and u_input == 'small'):
                print('您赢了!!!')
                multi = 1
                if len(user_properties) > 0:
                    use_pro = input('是否使用道具: ')
                    if use_pro.lower() == 'yes':
                        use_pro = int(input('请选择使用第几个道具{} :'.format(user_properties)))
                        use_pro -= 1
                        # 判断道具类型
                        if user_properties[use_pro] == 'X 3':
                            multi = 3
                            print('奖金翻3倍')
                        elif user_properties[use_pro] == 'X 1-5':
                            multi = random.randint(1, 5)
                            print('奖金翻{}倍'.format(multi))
                        user_properties.remove(user_properties[use_pro])
                user_info['glod'] += 100 * multi;
            else:
                print('您输了!')
                user_info['glod'] -= 100;
            if (user_info['glod'] <= 0):
                print('您的金币已经用完,感谢您的游玩')
                break
            if user_info['glod'] % 1000 == 0:
                shop = input('您现在有金币:{},是否购买道具 yes or no: '.format(user_info['glod']))
                if shop.lower() == 'yes':
                    good_num = int(input('请选择要购买第几个道具 {}'.format(properties)))
                    if good_num == 1:
                        user_properties.append('X 3')
                        user_info['glod'] -= 250
                        print('购买成功!消耗金币250')
                    elif good_num == 2:
                        user_properties.append('X 1-5')
                        user_info['glod'] -= 300
                        print('购买成功!消耗金币300')
                    else:
                        print('没有该道具,您失去了这次机会')
            else:
                print('您现在有金币:{} '.format(user_info['glod']))
    else:
        youxi1()


def caiquan():
    result = input('是否开始游戏 yes or no :  ')

    if (result.lower() == 'yes'):
        import random
        choices = ["Rock", "Paper", "Scissors"]
        computer = random.choice(choices)
        player = False
        cpu_score = 0
        player_score = 0
        while True:
            print("use E to check your score")
            player = input("Rock,Paper or Scissors?").capitalize()
            if player == computer:
                print("Tie!")
            elif player == "Rock":
                if computer == "Paper":
                    print("You lose!", computer, "covers", player)
                    cpu_score += 1
                else:
                    print("You win!", player, "smashes", computer)
                    player_score += 1
            elif player == "Paper":
                if computer == "Scissors":
                    print("You lose!", computer, "cut", player)
                    cpu_score += 1
                else:
                    print("You win!", player, "covers", computer)
                    player_score += 1
            elif player == "Scissors":
                if computer == "Rock":
                    print("You loss...", computer, "smashes", player)
                    cpu_score += 1
                else:
                    print("You win!", player, "cut", computer)
                    player_score += 1
            elif player == "E":
                print("Final Scores:")
                print(f"CPU:{cpu_score}")
                print(f"Player:{player_score}")
                break
            else:
                print("That's not a valid paly.Check your spelling!")
            computer = random.choice(choices)
    else:
        youxi1()

def youxi1():
    q = int(input('是否继续游戏?\n键入0退出该游戏,返回游戏盒子\n键入1直接退出整个游戏盒子\n'))
    if q == 0:
        youxi()
    elif q == 1:
        print('\n即将退出游戏盒子,欢迎下次游玩!\n')
        exit()


while True:
    usr = input("Master,please enter username:")
    if usr == init_username:
        while flag0 < 3:
            password = input("Master,please enter password:")
            if password == init_password:
                print("Success Login~")
                flag1 = 1
                youxi()
            else:
                flag0 += 1
                if flag0 <= 2:
                    print("Master,Wrong Password,enter again!~")
        if flag1 == 1:
            break
        flag0 = 0
        print("Wrong Password,login again!")
    else:
        print("Wrong Username,enter again!")
  所有源代码如上所示,均为亲手敲出

2.3在华为云服务器上运行

2.3.1开机华为云虚拟机(学期始已购买)

2.3.2putty连接虚拟机

2.3.3winscp导入源码文件

2.3.4运行

  在putty中运行三个游戏,并实现创建用户名与密码,登录用户,游戏,退出再次登陆,重选游戏,退出游戏盒子等功能。(视频链接在图片流程后)
  1.创建用户名与密码并登录用户

  2.进入游戏一,猜拳游戏,并查看分数,返回登录界面
  3.进入游戏二,猜大小,并演示选中后重新返回游戏菜单选择游戏

  4.进入游戏三,数字炸弹,本局电脑踩到炸弹,游戏结束,返回登陆界面

  5.退出游戏盒子,运行完毕,删除winscp中的文件,此时已检测不到文件夹

2.3.5putty上华为云虚拟机运行视频展示

http://t.csdn.cn/3IoAG

3.致谢+课程总结

  呼,行文至此,不知不觉也到了跟python,王老师这两位颇有意思的老友暂别之时。根据学姐的推荐,我选择了这门她口中“很有意思,也很有用的”大热门python程序课。初识王老师,感觉到他身上的年轻动力,同样昭示着这是一门不无聊且令人喜爱的课程。然而,在学习了第一次课后,安装软件,安装pycharm,注册码云,链接putty,上传代码,可着实是让我好好喝了一壶。在完成了这一切之后,我恐怕才是有了探索python这一语言的基础。在随后的课程中,按照我的印象,我们依次学习了
1.Python语言基础
2.流程控制语句
3.基本数据类型
4.字符串
5.循环语句和流程控制语句
6.列表、元组、字典、集合及其常用功能
7.正则表达式
8.面向对象程序设计 (三要素:封装、继承、多态)
9.文件操作
10.Socket编程
11.Python操作数据库
12.Python爬虫爬取想要的内容
13.一些小游戏代码:
 小学生计算题库:

点击查看代码
# 编辑 者:岭轻
# 学   院:北京电子科技学院
# 开发时间: 18:27
import random
opcode = ["+","-","*","/"]
flag = random.choice(opcode)
a = random.randint(1,100)
b = random.randint(1,100)
if flag == "+":
    result = a + b
elif flag == "-":
    result = a - b
elif flag == "*":
    result = a * b
else :
    result = a / b
print("亲爱的李宜时大帅哥o((>ω< ))o:请听题")
print("题目:",str(a)+  flag + str(b) + "=?" )
answer = int(input("请输入答案!哈哈\n"))
if result == answer:
    print("对了!我的宝ヾ(≧▽≦*)o")
else:
    print("继续算吧,我的宝(︶^︶)")


 猜数游戏:
点击查看代码
import random
#随机生成一个整数
randomnumber = random.randint(1,100)

a = int(input("来猜一猜呀,是一个整数哦:"))
flag = False
while flag == False:
   if a > randomnumber:
        print("你猜的这个数字有点大呀")
        a=int(input())
   elif a < randomnumber:
        print("你猜的这个数字有点小呀")
        a = int(input())
   else:
        print("嘿嘿,你终于猜对了啊!")
        flag = True
 岭轻的计算器
点击查看代码
# 编辑 者:岭轻
# 学   院:北京电子科技学院
# 开发时间: 18:52
# put hands together and be my own god
print("岭轻的计算器1代")
flag = True
while flag == True:
    choice = input("请选择你想要的计算器类型:0为基础版、1为复数版\n")
    op = input("请输入希望的运算(+,-,*,/,%,//)\n")
    if op == "0":
        break
    if choice == "0":
        a = int(input("请输入操作数a\n"))
        b = int(input("请输入操作数b\n"))
    elif choice == "1":
        a = complex(input("请输入第一个复数\n"))
        b = complex(input("请输入第二个复数\n"))
        result = 0
    if op == "+":
        result = a + b
    elif op == "-":
        result = a - b
    elif op == "*":
            result = a * b
    elif op == "/":
        result = a / b
    elif op == "%":
        result = a % b
    elif op == "//":
        result = a // b
    elif op == "0":
        flag = False
    else:
        print("输入有误,请再试一次\n")
        continue
    print(a,op,b,"=", result,"\n")

 socket服务端(启动客户端前需先启动服务端)
点击查看代码
# 编辑 者:岭轻
# 学   院:北京电子科技学院
# 开发时间: 18:43
# put hands together and be my own god
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('127.0.0.1',8001))#绑定.Localhost = 127.0.0.1
s.listen()#监听
conn,address = s.accept()#阻塞
data = conn.recv(1024)
print(data.decode())
conn.sendall(("娇娇收到:"+str(data.decode())).encode())
s.close()
 socket客户端
点击查看代码
# 编辑 者:岭轻
# 学   院:北京电子科技学院
# 开发时间: 19:27
# put hands together and be my own god
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',8001))
str = input("要给娇娇发什么呀:")
s.sendall(str.encode())
data = s.recv(1024)
print(data.decode())
s.close()
 socket客户端(文件写入自动发送)
点击查看代码
# 编辑 者:岭轻
# 学   院:北京电子科技学院
# 开发时间: 19:43
# put hands together and be my own god
import socket
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',8001))
file1 = open("hello",'r+', encoding="GBK")
file1.write("hhhhhhhh")
str1 = file1.readlines()
file1.close()
#str = input("要给娇娇发什么呀:")
s.sendall(str(str1).encode())
data = s.recv(1024)
print(data.decode())
s.close()

  总体来讲就是这些吧,每节课真的学的到很多有意思也能够理解的新知识,虽然跟上王老师的惊人手速也很难啦~( TロT)σ,除了课上的小知识外,我更多的是了解到了pycharm中可以安装如此多的外部库,相较于c语言我认为是更人性化,更为普适化的功能;还有就是csdn的测评作业,让我知道了这样一个体量大,知识多,大佬多的平台,同时也让我真正掌握了一个名叫markdown的编译器,这篇最后的博文就是用它来完成的,相信在日后的学习中,我将从中学到很多很多东西,很感谢王老师布置这次测评作业(我还捞了件短袖嘿嘿o((>ω< ))o)。

  最后给一点点个人的建议吧,第一就是王老师代码速度真的很快,可以课后或课前在群里发一下代码截图或者源码之类的~ 第二就是王老师可以使用一下我们测评过的python技能树,教我们一点一点的点亮他,会更清晰~。好啦,给我们可爱的王老师吹毛求疵就到这里了。

  最后,不知道与王老师,与python,与各位同学们的缘分还能否续上,诸位引我于低谷,照我以通途,我受益良多,与诸位就此别过,祝,他日凌云,万事胜意!

posted @ 2022-05-31 20:17  梅花落南山  阅读(42)  评论(0编辑  收藏  举报