开始编程写游戏

2019-10-02  本文已影响0人  不在隔壁的王二叔

上节课我们已经把python语言的语法学完了, 我们开始编程来玩点啥。 玩啥呢? 我们先做个游戏玩玩吧,嘿嘿嘿。把下面的代码贴到试验场去,然后运行起来,运行后输出区域有个输入框,等我们出拳, 我们输入数字1、2、3或者q退出。

rounds = 0
is_finish_flag = True
win_rounds=0
for robot in "120010212100122112010201201002112":
    if is_finish_flag:
        player = input("""游戏开始请出招:  1(表示剪刀), 2(表示石头), 3(表示布), q(表示退出游戏) """)
        if player == "q" :
            is_finish_flag = False
            print("游戏终止!")
        else:
            rounds = rounds +1
            if robot == player:
                print("打平!")
            else:
                if int(player)-int(robot)==1 :
                    print("你赢得了本局!")
                    win_rounds = win_rounds + 1
                else:
                    print("本局你输了!")
print("总共玩了" + str(rounds) +"局。 你赢了" + str(win_rounds) + "局。")
image.png

四局一胜, 我战绩不错哈~~你呢? 还要多玩几局么?随你哈。石头剪子布玩腻了, 我们来写新游戏,掷骰子、拼图、连连看、围棋、……


image.png

学习,学习先,知道了!

来,仔细看一下前面的代码, 代码中, 用到了三个新的命令函数:

命令函数 参数说明 命令过程或者结果说明
input() 需要一个参数, 参数的类型是字符串 字符串参数是用户输入的提示,命令函数执行完后将用户的输入返回到程序中;
int() 需要一个参数,参数的类型是字符串 将字符串参数,变成一个整数;
str() 需要一个参数,参数的类型随便,字符串、数、布尔值都可以 将参数变成一个字符串;

有了上面的三个函数, 我们可以在程序执行后输入,与程序交互。 另外两个命令函数, 做了基本数据类型之间的转换——前面我们说过,不同类型的数据之间的运算结果往往不知道结果是啥, 所以很多时候, 在做运算的时候,需要运算符号前后的数据类型是一致的。 甚至, 更严重的是,有些运算符号前后的的数据类型不一致, 我们的程序会报错,运行不下去:


image.png

之前的课程中,我们学习过一个命令函数print(), 今天, 我们又学习了三个函数。 回顾下我们到目前为止掌握的语法:


image.png

啊,这里有个新的语法,咱们得学会, 函数。 我们总是命令命令的叫, 这些命令,学名叫做函数(function)。 函数, 也是由多条程序语句组成的一段代码块, 并且这一段代码块是有名字的, 可以反复的引用多次执行。 感受一下:


image.png

看下函数定义的语法:

def <函数名称>(参数,多个参数用逗号分隔):
    函数所代表的代码片段

再多学一个命令, return(),作用是返回参数中的值, 一般是在函数中使用,让函数返回参数的值。


image.png

提示下定义函数的细节哈: 用def这固定的三个字符来开始函数定义, 后接一个空格, 后面接函数名, 函数名跟变量名一样,字母开始的一串字符,后面跟一对儿小括号, 括号内是用逗号分隔的多个参数, 参数可以没有, 也可是多个, 不管有没有参数, 那对小括号不可少。

函数可以反复调用(函数名加上一对小括号,有时候括号里面有一个或者多个参数), 所以最适合用来做那些需要反复完成的任务了。比如前面的石头剪子布的游戏, 我们来做个高级点的版本,看代码, 随时可以粘贴到试验场去运行。

def whatiamplay(numofme):
    if(numofme == 1):
        return("剪刀")
    if(numofme == 2):
        return("石头")
    if(numofme == 3):
        return("布")
    return("不知道")

rounds = 0
is_finish_flag = True
win_rounds=0
for robot in "120010212100122112010201201002112":
    if is_finish_flag:
        player = input("""游戏开始请出招:  1(表示剪刀), 2(表示石头), 3(表示布), q(表示退出游戏) """)
        if player == "q" :
            is_finish_flag = False
            print("游戏终止!")
        else:
            rounds = rounds +1
            print("第" + str(rounds) + "回合,机器人出的是" + whatiamplay(int(robot)+1) + ";你出的是" + whatiamplay(int(player)))
            if robot == player:
                print("打平!")
            else:
                if int(player)-int(robot)==1 :
                    print("你赢得了本局!")
                    win_rounds = win_rounds + 1
                else:
                    print("本局你输了!")
print("总共玩了" + str(rounds) +"局。 你赢了" + str(win_rounds) + "局。")

数、字符串、条件表达式三种基本的数据类型;循环语句和条件判断语句;命令函数的定义和调用;三块内容,几乎就是Python语法的全部了。有了这些语法基础,我们编写程序完成任务需要掌握的编程语法几乎算是全部学完了。命令函数除了我们自己编写的外,还可以是Python编程语言自己原来就定义好的函数,比如前面我们使用过的print、return、input、int、str这几个函数,除了这几个以外, 还有一些其他函数,后面我们用到的时候,我们会慢慢介绍。 然后,除了语言自带的一些函数、我们自己定义的函数外, 我们也可以把其他人写的函数,导入到我们的程序中;存放着很多函数的地方,一般称为函数库;然后,我们通过编写函数的人提供的一些说明文档,知道了函数库的名字,知道了函数库内有些什么函数,我们就可以把这些函数导入到我们当前的代码里,导入之后,我们就可以使用这些函数了。 比如,有人写了一个生成随机数的函数,放在一个叫做random的函数库中,在这个函数库中,有一个随机生成一个指定范围内的整数的函数叫做randint的函数,通过函数导入语句, 把函数导入到当前文件,然后,就可以调用这个函数,完成该函数执行的功能了。从一个已知命名的函数库中导入函数的语法是:

from <函数库的名字> import <函数名字>

比如,我们从一个叫做random的函数库中, 导入它内部定义的一个函数randint,其后我们就可以调用这个名字为randint的命令函数完成生成一个随机整数的功能。看代码:

image.png
randint函数调用的时候需要两个参数,两个参数是两个整数,分别代表随机生成的整数所在的范围的最小值和最大值。上面的代码通过循环语句for i in "a"*5:调用了5次生成1至7之间的随机整数的函数,其结果是分5次生成了5个整数,生成的整数在1至7之间。因为是随机生成的整数,所以你在执行的时候,运行程序得到的结果跟我的应该会不一样,随机生成的整数嘛。
之前我们写的猜拳的游戏, 因为电脑是从一个我们给定的命令串中每次取一个作为自己的出拳规则, 聪明的你,是不是已经发现,只要每次对应的出比电脑大一点的拳就一定会赢呢。看电脑:
for robot in "120010212100122112010201201002112":
如果按照对应的顺序,我们第一次出比电脑1大一点的,也就是出2,我们就赢了,接着,我们出3、1、1、2、1、3……。改进下,这次, 我们用上面学到的一个新函数,一个从random函数库中导入的新函数randint,让电脑随机在0至2之间出拳,游戏就变得更公平了。
from random import randint

def whatiamplay(numofme):
    if(numofme == 1):
        return("剪刀")
    if(numofme == 2):
        return("石头")
    if(numofme == 3):
        return("布")
    return("不知道")

rounds = 0
is_finish_flag = True
win_rounds=0
for robot in "x"*100:
    robot = randint(0, 2)
    if is_finish_flag:
        player = input("""游戏开始请出招:  1(表示剪刀), 2(表示石头), 3(表示布), q(表示退出游戏) """)
        if player == "q" :
            is_finish_flag = False
            print("游戏终止!")
        else:
            rounds = rounds +1
            print("第" + str(rounds) + "回合,机器人出的是" + whatiamplay(int(robot)+1) + ";你出的是" + whatiamplay(int(player)))
            if robot == player:
                print("打平!")
            else:
                if int(player)-int(robot)==1 :
                    print("你赢得了本局!")
                    win_rounds = win_rounds + 1
                else:
                    print("本局你输了!")
print("总共玩了" + str(rounds) +"局。 你赢了" + str(win_rounds) + "局。")
image.png

哈哈,这次我战绩不错哦,3局两胜, 打完收工,再玩下去就不行了,“久赌必输”嘛。

结束本节课之前,我们来多玩几个编程任务:

# 打印乘法口诀表
for i in "123456789":
    for j in "123456789":
        print(str(i) + " x  "+ str(j) + " = " + str(int(i)*int(j)) + "    ", end="")
    print("")
image.png

再来写个简单游戏, 掷骰子:

from random import randint

# 最开始玩家有100元
your_money = 100
is_finish_flag = True
for robot in "T"*100:
    if is_finish_flag:
        your_choice = input("""游戏开始,请下注:  小(1),大(2),q(表示退出游戏) """)
        if your_choice == "q" :
            is_finish_flag = False
            print("游戏终止!")
        else:
            if your_choice=='1' or your_choice=='2':
                points = randint(1, 6)
                if (points<4 and your_choice=='1') or (points>3 and your_choice=='2'):
                    print('骰子点数:', points)
                    print('恭喜,你赢了 10 元,你现在有 ' + str(your_money + 10)  + ' 元本金')
                    your_money = your_money + 10
                else:
                    print('骰子点数:', points)
                    print('很遗憾,你输了 10 元,你现在有 ' + str(your_money-10) + ' 元本金')
                    your_money = your_money - 10
            else:
                print('格式有误,请重新输入')

print("你开始有本金100元,现在你有本金",your_money,"元,亲爱的,战绩如何啊?")
image.png

再来做几个游戏,拼图、祖玛、打砖块、推箱子、俄罗斯方块、对角棋、五子棋、象棋、围棋、忍者斗恶龙、王者荣耀、……呃,游戏时间结束!我们是来机器学习的。

留个作业吧, 编写程序完成下面的题目:

  1. 输入三个数, 将这三个数按照从小到大的顺序打印出来。
  2. 求1至100内所有数的和。
上一篇 下一篇

猜你喜欢

热点阅读