“数字炸弹“——练习Python基础知识的小游戏

数字"炸弹"

数字炸弹小游戏,平时可以多个人一块玩。游戏规则也很简单:从0~100之间选一个数字,作为“炸弹”。每人轮流猜,数字的范围不断缩小,直到有人“踩到炸弹”为止。比如:炸弹数字为50,第一个人猜10,提示炸弹在“10到100”之间;第二个人猜60,提示炸弹在“10到60”之间,第三个人猜50,遇到炸弹,游戏结束。

规则很简单,如果人多的时候可以一块玩。如果没人的话,那就只能自己和自己玩。于是乎,我想到用程序写一个这样的游戏出来。嗯,应该很简单…

基本代码

事实上,打脸来得很快,本以为很轻松就搞定的东西,我花费了大概2个小时的时间,有兴趣的小伙伴也可以挑战一下,对自己的基础语法练习有很大的帮助。

整理一下思路:

  1. 这个游戏需要一个“炸弹”数字,这个简单,用random中的randint方法,只要指定范围,就能随机生成一个数字。
import random
boom = random.randint(1,100)
"""
pthon导入第三方工具,用 import 关键字
"""
  1. 如果每次玩都可以控制炸弹的范围就好了,这个时候,函数就派上用场啦。
import random
def numb_boom(start=1,end=100):
    boom = random.randint(start,end)
"""
number_boom函数,start参数默认为1,end参数默认为100
如果要更改参数值,只需在调用的时候指定对应的数值,如:
number_boom(14,250)
number_boom(13,34)
"""
  1. 这个游戏要一直玩,简单,while True一直循环下去,直到达到某些条件,就跳出循环。
import random
def numb_boom(start=1,end=100):
    boom = random.randint(start,end)
    while True:
        # 代码块
        pass
"""
pass只是为了保证代码完整,经常用来整理思路用。
就目前我的经验来看,while循环很少用到,最常用的是for循环。
while True用不好,程序就嗝屁啦...
"""
  1. 需要告诉程序,你猜的是什么数字?一个input函数,搞定。
import random
def numb_boom(start=1,end=100):
    boom = random.randint(start,end)
    while True:
  answer = input("踩炸弹(q退出):")
"""
这里有一个新手都会掉进去的坑:
1、input 接受用户输入信息传给answer,answer是字符串类型数据。
2、input 接受用户输入信息传给answer,answer是字符串类型数据。
3、input 接受用户输入信息传给answer,answer是字符串类型数据。
"""
  1. 如果不想玩啦,输入q退出。if条件,当输入的是字符串q的时候,结束死循环。
import random
def numb_boom(start=1,end=100):
    boom = random.randint(start,end)
    while True:
  answer = input("踩炸弹(q退出):")
        if answer == "q":
            print(boom,"退出游戏!")
            return boom
"""
在函数中,程序执行到 return 的时候,会自动跳出循环(应该是跳出整个函数)。
如果不是在函数中,也可以使用 break 跳出循环。
"""
  1. 如果调皮一下,输入的不是数字,应该怎么办?所以程序中应该还要判断输入的是不是数字,如果不是,就需要继续猜。
import random
def numb_boom(start=1,end=100):
    boom = random.randint(start,end)
    while True:
  answer = input("踩炸弹(q退出):")
        if answer == "q":
            print(boom,"退出游戏!")
            return boom
        if not answer.isdigit():
            print("调皮,输入整数>_<")
            continue
        else:
            answer = int(answer)
"""
这里的answer是字符串对象(对象都有很多方法),isdigit()方法可以用来识别answer是不是都是由数字组成的。
continue 在这里用的就很完美,程序执行到continue的时候,下面的代码都不执行,继续猜。
int(answer) :将answer转为int对象,便于比较boom和answer。
""" 
  1. 如果猜中了炸弹,也需要跳出死循环。
import random
def numb_boom(start=1,end=100):
    boom = random.randint(start,end)
    while True:
  answer = input("踩炸弹(q退出):")
        if answer == "q":
            print(boom,"退出游戏!")
            return boom
        if not answer.isdigit():
            print("调皮,输入整数>_<")
            continue
        else:
            answer = int(answer)        
        if boom == answer:
                print(boom,"boom~~~~~~")
                return boom
        else:
            # 这里应该最关键的部分
            pass

  1. 接下来最关键的一步就是,boom与answer不相等的时候,应该怎么办?

核心代码

boom与answer不相等,应该提示炸弹在某个区间内,而这个区间是根据answer的值去确定。

举个例子:

boom=50,第一次输入answer=20,那么应该提示炸弹在【20,100】之间;

第二次输入40,那么应该提示炸弹在【40,100】之间;

第三次输入60,那么应该提示炸弹在【40,60】之间;

直达输入50,boom,游戏结束。

以上是正常的输入方式…

以下是非正常的输入方式:

另一个例子:

boom=50,第一次输入answer=20,那么应该提示炸弹在【20,100】之间;

第二次输入10,那么应该如何提示?应该提示炸弹在【20,100】,还是【10,100】。

第三次输入60,那么应该如何提示?应该提示炸弹在【20,60】,还是【10,60】。

问题关键在于,如何给出合理的提示?

现在提示分为2种:

1、根据用户历史输入数据,给出炸弹范围。

2、根据用户最近2次输入的数据,给出炸弹范围。

我觉得第一种太死板,一直强制你去“踩”炸弹;第二种更加灵活,没有强求的意思,是生是死,自己掌握。

第一种提示的解决思路:

1、将用户输入的answer全部放到一个列表(answer_list)中,然后从列表中找出最接近boom的两个数字,问题转化为在answer_list中寻找距离boom的最近两个数。这一步我刚开始想得有点复杂,这里有一种简单方法:将boom放到answer_list中,升序排列,找到boom前后的两个数字即可,完整代码如下:

import random

def number_boom_v1(start=1,end=100):
    boom = random.randint(start,end)
    answer_list = [start,boom,end]
    while True:
        answer = input("踩炸弹(q退出):")
        if answer == "q":
            print("boom:",boom)
            return boom
        if not answer.isdigit():
            print("调皮,输入整数>_<")
            continue
        else:
            answer = int(answer)
            answer_list.append(answer)
        if boom == answer:
            print(boom," ,boom~~~~~~~~")
            return boom
        else:
            sorted_list = sorted(answer_list)
            boom_index = sorted(sorted_list).index(boom)
            print("炸弹在:{0}-{1}".format(sorted_list[boom_index-1],sorted_list[boom_index+1]))


if __name__ == '__main__':
    number_boom_v1()

第二种提示的解决思路:

制作一个提示列表numb_list,当boom大于answer,就替换numb_list的第一个数字;当boom小于answer,就替换numb_list中的第二个数字。具体代码如下:

import random


def number_boom_v2(start=1,end=100):
    boom = random.randint(start,end)
    numb_list = [start,end]
    while True:
        answer = input("踩炸弹(q退出):")
        if answer == "q":
            print("boom:",boom)
            return boom
        if not answer.isdigit():
            print("调皮,输入整数>_<")
            continue
        else:
            answer = int(answer)
        if boom == answer:
            print(boom," ,bomm~~~~~~~~")
            return boom
        elif boom > answer:
            numb_list[0] = answer
            print("炸弹在:{0}-{1}".format(numb_list[0],numb_list[1]))
        else:
            numb_list[1] = answer
            print("炸弹在:{0}-{1}".format(numb_list[0],numb_list[1]))


if __name__ == '__main__':
    number_boom_v2()

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

若有侵权,请联系删除

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python接球小游戏是一款简单的游戏,玩家需要控制一个接球器来接住从上方掉落的球,每接到一个球得一分,如果接到炸弹则扣一分。以下是一个简单的Python代码示例: ```python import pygame import random # 初始化游戏 pygame.init() # 设置游戏窗口大小 screen_width = 800 screen_height = 600 screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("接球小游戏") # 定义颜色 BLACK = (0, 0, 0) WHITE = (255, 255, 255) # 加载图片 ball_image = pygame.image.load("ball.png") bomb_image = pygame.image.load("bomb.png") player_image = pygame.image.load("player.png") # 获取图片大小 ball_width = ball_image.get_width() ball_height = ball_image.get_height() bomb_width = bomb_image.get_width() bomb_height = bomb_image.get_height() player_width = player_image.get_width() player_height = player_image.get_height() # 设置玩家初始位置 player_x = (screen_width - player_width) // 2 player_y = screen_height - player_height # 设置球和炸弹的初始位置和速度 ball_x = random.randint(0, screen_width - ball_width) ball_y = 0 ball_speed = 5 bomb_x = random.randint(0, screen_width - bomb_width) bomb_y = 0 bomb_speed = 5 # 设置分数 score = 0 # 游戏主循环 running = True clock = pygame.time.Clock() while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 移动玩家 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: player_x -= 5 if keys[pygame.K_RIGHT]: player_x += 5 # 更新球和炸弹的位置 ball_y += ball_speed bomb_y += bomb_speed # 判断球是否接到玩家 if ball_y + ball_height >= player_y and ball_x + ball_width >= player_x and ball_x <= player_x + player_width: score += 1 ball_x = random.randint(0, screen_width - ball_width) ball_y = 0 # 判断炸弹是否接到玩家 if bomb_y + bomb_height >= player_y and bomb_x + bomb_width >= player_x and bomb_x <= player_x + player_width: score -= 1 bomb_x = random.randint(0, screen_width - bomb_width) bomb_y = 0 # 绘制游戏界面 screen.fill(BLACK) screen.blit(ball_image, (ball_x, ball_y)) screen.blit(bomb_image, (bomb_x, bomb_y)) screen.blit(player_image, (player_x, player_y)) pygame.display.flip() # 控制游戏帧率 clock.tick(60) # 游戏结束后退出 pygame.quit() ``` 请注意,上述代码中的图片文件需要提前准备好,并与代码文件放在同一目录下。你可以根据自己的需求自定义图片和调整游戏的逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值