人机对战小游戏

本文介绍了一个基于Python的简单人机对战游戏项目。通过随机生成玩家与敌人的血量和攻击力,实现了三局两胜的对战模式。文中详细展示了如何使用Python的基本语法和控制流来构建游戏逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目要求:

如今除了字典外,我们已经学了Python编程中最基本的语法,也学了三种控制流(顺序结构,循环结构,分支结构),这些足以让我们实现一些简单的项目了,当然复杂的项目也是可以用最基本的语法实现,但是操作会繁杂且机械些。其实计算机运行的思路很简单的,它得到一个前提,再根据某些条件判断进行分支,最后根据你定下的公式进行运算得出结果。如果公式复杂,需要重复操作的话,就可以通过循环进行处理。

光听会比较抽象,接下来我们通过一个小游戏项目来加深对编程的认知吧,这个小游戏就是【人机PK】。在这个小游戏项目中,我们会运用所学知识(也会适量补充一些新知识),一起完成一个文字版的人机对战小游戏,并逐步增加游戏的功能,让它变得更真实、更好玩。

简单来说,这个游戏中,会随机生成玩家和敌人的属性,同时互相攻击,直至一方血量小于零。另外,这样的战斗会持续三局,采取三局两胜制,最后输出战斗结果,公布获胜方。

 

其实在现实生活中,甲方这样就已经是提完需求了,接下来就交由技术人员去琢磨,只要最终结果一致且不出问题就可以交付任务啦。

考虑到我们还是一群刚入门的新手,主要目的是学习,所以我先给大家梳理一下这个小游戏的整体思路吧~

游戏名称:人机PK

游戏角色:玩家&敌人

游戏规则:玩家与敌人相互攻击,血量先为0者失败

游戏模式:三局两胜

我们要有玩家、敌人,要能相互攻击,攻击能够减少血量,最终会有胜负。

那么首先得创建角色,角色有血量与攻击力,主要的是血量和攻击力,我们需要进行它们之间的计算。接下来就是一些运算,如何相互攻击,如何减少血量,以及怎么显示结果,这些就交由你自己思考啦~

这里我再分享两点额外的知识,也是游戏里可能用到的内容:【随机生成血量与攻击力】、【延迟显示结果】。

(1)随机生成血量与攻击力

由于是三局两胜的模式,我们不能够一开始限定死双方的血量与攻击力,不然始终由一方获胜就没有意义啦。可以在每一轮结束后重新设定两个值(用input()函数),这会比较麻烦,而且在数值上是主观的。我这里有一种方法可以交由计算机随机生成数字,这样就不会我们手动输入且保证相对公平啦。

import random    # 导入random模块

# 使用randint()方法,在1-100间随机生成一个整数,包括1和100
num_1 = random.randint(1, 100)    
num_2 = random.randint(1, 100)

# 每次打印的数字都是不一样的
print('num1为:{}\nnum2为:{}'.format(num_1, num_2))

(2)延迟显示结果

在需求中我们看到,结果是逐渐显示的,在我们之前运行时,结果是一下子全部显示出来的,那么我们要怎么做到逐渐显示的效果呢?

这里就可以用到另一个模块:time模块

import time    # 导入time模块

print('测试1')

time.sleep(2)    # 让程序休眠2秒,可以改秒数

print('2秒后显示测试2')

time模块中有许多关于时间的操作,其中就有让程序休眠的方法 time.sleep(n)。逐渐显示就是延迟显示,只要让时间暂停1或2秒钟就可以啦~

代码实现:
 

# 导入time和random模块
import time
import random

# 初始化玩家和敌人的胜利次数
player_victory = 0
enemy_victory = 0

# 设置循环3次,三局两胜
for i in range(1, 4):
    # 每局开始前停顿1.5秒
    time.sleep(1.5)
    print('  \n——————现在是第 %s 局——————' % i)
    # 对比之前:(' \n——————现在是第'+str(i)+'局——————')

    # 随机生成【血量】与【攻击力】
    player_life = random.randint(100, 150)  #玩家血量
    player_attack = random.randint(30, 50)  #玩家攻击力
    enemy_life = random.randint(100, 150)   #敌人血量
    enemy_attack = random.randint(30, 50)   #敌人攻击力
    #将其打印出来
    print('【玩家】\n血量:%s\n攻击:%s' % (player_life, player_attack))
    print('------------------------')
    time.sleep(1)
    print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life, enemy_attack))
    print('-----------------------')
    time.sleep(1)

    # 如果双方血量都大于0时,就进入循环
    while player_life > 0 and enemy_life > 0:
        # 目前血量 = 原有血量 - 对方的攻击力
        player_life = player_life - enemy_attack
        enemy_life = enemy_life - player_attack
        if player_life < 0:
            player_life = 0
        if enemy_life < 0:
            enemy_life = 0
        print('你发起了攻击,【敌人】剩余血量%s' % enemy_life)
        print('敌人向你发起了攻击,【玩家】的血量剩余%s' % player_life)
        print('-----------------------')
        time.sleep(1.2)

    if player_life > 0 and enemy_life <= 0:
        player_victory += 1
        print('敌人死翘翘了,你赢了!')
    elif player_life <= 0 and enemy_life > 0:
        enemy_victory += 1
        print('悲催,敌人把你干掉了!')
    else:
        print('哎呀,你和敌人同归于尽了!')
    # 一次循环过后,会回到循环的条件判断,如果血量都大于0,继续循环

if player_victory > enemy_victory:
    time.sleep(1)
    print('\n【最终结果:你赢了!】')
elif enemy_victory > player_victory:
    print('\n【最终结果:你输了!】')
else:
    print('\n【最终结果:平局!】')

运行结果:

因为血量和攻击力都是随机生成的,所以每次的执行结果都是不固定的。 

### 如何用Python制作人机小游戏 #### 创建简单的五子棋人机游戏 为了创建一个人机的游戏,可以从较为简单且经典的五子棋入手。此项目专为Python编程爱好者设计,尤其适合希望探索游戏开发及人工智能入门的朋友[^1]。 ```python import numpy as np class Gomoku: def __init__(self, size=15): self.board = np.zeros((size, size), dtype=int) self.size = size def move(self, player, row, col): if not (0 <= row < self.size and 0 <= col < self.size) or self.board[row][col] != 0: raise ValueError('Invalid Move') self.board[row][col] = player return self.check_winner(player, row, col) def check_winner(self, player, row, col): directions = [(0, 1), (1, 0), (1, 1), (-1, 1)] for d in directions: count = 1 r, c = row + d[0], col + d[1] while 0 <= r < self.size and 0 <= c < self.size and self.board[r][c] == player: count += 1 r += d[0] c += d[1] r, c = row - d[0], col - d[1] while 0 <= r < self.size and 0 <= c < self.size and self.board[r][c] == player: count += 1 r -= d[0] c -= d[1] if count >= 5: return True return False def play_game(): game = Gomoku() current_player = 1 while True: try: print(f'Player {current_player} turn:') # For simplicity, we assume the AI always plays second. if current_player == 2: import random empty_cells = [(r, c) for r in range(game.size) for c in range(game.size) if game.board[r][c] == 0] if not empty_cells: break ai_move = random.choice(empty_cells) win = game.move(current_player, *ai_move) print(f'AI moved to ({ai_move[0]}, {ai_move[1]})') else: user_input = input("Enter your move 'row,col': ") row, col = map(int, user_input.split(',')) win = game.move(current_player, row, col) if win: print(f'\nPlayer {current_player} wins!') break current_player = 3 - current_player except Exception as e: print(e) if __name__ == '__main__': play_game() ``` 这段代码实现了基本的人机功能,在玩家输入坐标后轮到计算机随机选择一个位置放置棋子。当一方连续五个相同颜色的棋子连成一线时,则该方获胜。 对于更复杂一点的例子,比如井字棋(Tic Tac Toe),也可以采用类似的思路来构建游戏逻辑并引入简易版的人工智能算法[^2]。 如果目标是进一步提升难度,可以考虑基于Pygame框架和蒙特卡洛树搜索(MCTS),实现更为复杂的“走四棋儿”(Connect Four)人机对抗小游戏。在这个案例中,CPU通过UCT算法决定最佳行动方案,从而提供更具挑性的对手体验[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值