我用Python写了几个摸鱼小游戏,赐你2023年度上班上学摸鱼必备良品!(附源码)

news2024/11/18 0:38:28

文章目录

  • 前言
      • 一丶超级玛丽
      • 二、沙漠打地鼠
      • 三、贪吃蛇
      • 四、坦克大战
      • 五、五子棋


前言

获取python整套完整教程,3263学习笔记,源码,项目实战,全部在手,python不愁~~~

Python学习资料点击领取福利

在这里插入图片描述


例如:

  • 超级玛丽
  • 俄罗斯方块
  • 植物大战僵尸
  • 贪吃蛇
  • 坦克大战
  • 魂斗罗
  • 打地鼠
  • 五子棋
  • 坤坤打篮球

其中最经典的莫过于,超级玛丽,贪吃蛇,坦克大战,以及坤坤打篮球简直不敢多玩一下
在这里插入图片描述
对于摸鱼小游戏,必须分享出来,勤勤恳恳工作叫劳动报酬,摸鱼才是真正的赚钱

一丶超级玛丽

超级玛丽是一个经典的2D平台游戏,它可以使用Python以及Pygame库来实现。以下是一个简单的超级玛丽游戏示例代码,获取源码关注我:

实现效果:

在这里插入图片描述

import pygame

pygame.init()

# 设置游戏窗口大小
win = pygame.display.set_mode((500, 480))

# 设置游戏标题
pygame.display.set_caption("Super Mario")

# 加载图片资源
walkRight = [pygame.image.load('images/pygame_right_1.png'),
             pygame.image.load('images/pygame_right_2.png'),
             pygame.image.load('images/pygame_right_3.png'),
             pygame.image.load('images/pygame_right_4.png'),
             pygame.image.load('images/pygame_right_5.png'),
             pygame.image.load('images/pygame_right_6.png')]
walkLeft = [pygame.image.load('images/pygame_left_1.png'),
            pygame.image.load('images/pygame_left_2.png'),
            pygame.image.load('images/pygame_left_3.png'),
            pygame.image.load('images/pygame_left_4.png'),
            pygame.image.load('images/pygame_left_5.png'),
            pygame.image.load('images/pygame_left_6.png')]
bg = pygame.image.load('images/pygame_bg.jpg')
char = pygame.image.load('images/pygame_stand.png')

# 设置游戏角色的初始坐标和速度
x = 50
y = 400
width = 64
height = 64
vel = 5

# 设置游戏角色左右移动的初始状态
isJump = False
jumpCount = 10
left = False
right = False
walkCount = 0

# 定义游戏循环
run = True
while run:
    pygame.time.delay(50)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and x > vel:
        x -= vel
        left = True
        right = False
    elif keys[pygame.K_RIGHT] and x < 500 - vel - width:
        x += vel
        left = False
        right = True
    else:
        left = False
        right = False
        walkCount = 0

    if not isJump:
        if keys[pygame.K_SPACE]:
            isJump = True
            left = False
            right = False
            walkCount = 0
    else:
        if jumpCount >= -10:
            y -= (jumpCount * abs(jumpCount)) * 0.2
            jumpCount -= 1
        else:
            jumpCount = 10
            isJump = False

    # 绘制游戏背景和角色
    # 先绘制背景,再绘制角色,确保角色出现在背景前面
    win.blit(bg, (0, 0))
    if walkCount + 1 >= 18:
        walkCount = 0
    if left:
        win.blit(walkLeft[walkCount // 3], (x, y))
        walkCount += 1
    elif right:
        win.blit(walkRight[walkCount // 3], (x, y))
        walkCount += 1
    else:
        win.blit(char, (x, y))

    pygame.display.update()

# 关闭游戏窗口并退出
pygame.quit()

这只是一个非常简单的示例代码,你可以进一步完善,添加新的角色、敌人、场景等,以实现更加丰富的游戏功能。

二、沙漠打地鼠

沙漠打地鼠是一种休闲娱乐小游戏,可以利用Python和Pygame库来实现。以下是一个简单的沙漠打地鼠游戏示例代码,获取源码关注我:

实现效果:
在这里插入图片描述

import pygame
import random
import time


def draw_mole(x, y):
    global mole_img
    win.blit(mole_img, (x, y))


pygame.init()

# 设置游戏窗口大小
win = pygame.display.set_mode((500, 500))

# 设置游戏标题
pygame.display.set_caption("Desert Mole")

# 加载图片资源
bg = pygame.image.load('images/mole_bg.jpg')
mole_img = pygame.image.load('images/mole.png')

# 设置游戏角色的初始坐标和速度
text_font = pygame.font.Font(None, 40)
score = 0
x = 100
y = 100
mole_x = random.randint(50, 400) 
mole_y = random.randint(100, 360)
vel = 5

# 设置游戏循环
run = True
while run:
    pygame.time.delay(50)
    
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
            
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        x -= vel
    elif keys[pygame.K_RIGHT]:
        x += vel
    elif keys[pygame.K_UP]:
        y -= vel
    elif keys[pygame.K_DOWN]:
        y += vel

    # 每隔一段时间更新地鼠位置
    if time.time() % 3 == 0:
        mole_x = random.randint(50, 400) 
        mole_y = random.randint(100, 360)
    
    # 碰撞检测,如果角色和地鼠坐标重合,则得分
    if mole_x - 20 < x < mole_x + 20 and mole_y - 20 < y < mole_y + 20:
        score += 1
    
    # 绘制游戏背景和角色以及地鼠
    # 先绘制背景,再绘制地鼠,最后绘制角色,确保角色出现在最前面
    win.blit(bg, (0, 0))
    draw_mole(mole_x, mole_y)
    pygame.draw.circle(win, (255, 255, 255), (x, y), 20, 0)
    
    # 绘制分数统计文本
    text = text_font.render("Score: " + str(score), True, (255, 255, 255))
    win.blit(text, (10, 10))

    pygame.display.update()

# 关闭游戏窗口并退出
pygame.quit()

这只是一个非常简单的示例代码,你可以进一步完善,添加新的元素等,以实现更加丰富的游戏功能。

三、贪吃蛇

贪吃蛇是一种经典的小游戏,可以使用Python和Pygame库来实现。以下是一个简单的贪吃蛇游戏示例代码,获取源码关注我:

实现效果:
在这里插入图片描述

import pygame
import random

pygame.init()

# 设置游戏窗口大小
win_size = (500, 500)
win = pygame.display.set_mode(win_size)

# 设置游戏标题
pygame.display.set_caption("Snake")

# 设置游戏元素的大小和速度
fps = 60
snake_size = 10
food_size = 10
vel = 10

# 设置游戏字符颜色
white = (255, 255, 255)
black = (0, 0, 0)

# 设置游戏角色初始位置和长度
x = 250
y = 250
snake_list = [[x, y], [x-vel, y], [x-(2*vel), y]]
snake_length = 3

# 设置食物初始位置
food_x = round(random.randrange(0, win_size[0]-snake_size) / 10.0) * 10.0
food_y = round(random.randrange(0, win_size[1]-snake_size) / 10.0) * 10.0

# 定义游戏循环
run = True
clock = pygame.time.Clock()

while run:
    # 设置游戏帧率
    clock.tick(fps)

    # 获取键盘事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False

    # 获取键盘的输入值
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        x -= vel
    if keys[pygame.K_RIGHT]:
        x += vel
    if keys[pygame.K_UP]:
        y -= vel
    if keys[pygame.K_DOWN]:
        y += vel

    # 绘制游戏背景和食物
    win.fill(black)
    pygame.draw.rect(win, white, [food_x, food_y, food_size, food_size])

    # 绘制蛇
    snake = []
    snake.append(x)
    snake.append(y)
    snake_list.append(snake)
    if len(snake_list) > snake_length:
        del snake_list[0]

    for seg in snake_list[:-1]:
        if seg == snake:
            run = False

    for s in snake_list:
        pygame.draw.rect(win, white, [s[0], s[1], snake_size, snake_size])

    # 判断蛇是否吃到食物
    if x == food_x and y == food_y:
        food_x = round(random.randrange(0, win_size[0]-snake_size) / 10.0) * 10.0
        food_y = round(random.randrange(0, win_size[1]-snake_size) / 10.0) * 10.0
        snake_length += 1

    # 更新游戏窗口
    pygame.display.update()

# 退出游戏
pygame.quit()

这只是一个非常简单的示例代码,你可以进一步完善,添加新的元素(如障碍物、关卡、音效等),以实现更加丰富的游戏功能。

四、坦克大战

坦克大战是一款经典的游戏,也可以使用Python和Pygame库来实现。以下是一个简单的坦克大战游戏示例代码,获取源码关注我:

实现效果:
在这里插入图片描述

import pygame
import random

# 设置游戏窗口大小
win_size = (800, 600)
win = pygame.display.set_mode(win_size)
pygame.display.set_caption("Tank Game")

# 加载游戏元素
bg_img = pygame.image.load("background.png")
player_img = pygame.image.load("player_tank.png")
enemy_img = pygame.image.load("enemy_tank.png")
bullet_img = pygame.image.load("bullet.png")

# 设置游戏元素的大小和速度
player_size = player_img.get_rect().size
player_x = (win_size[0] - player_size[0]) // 2
player_y = win_size[1] - player_size[1]
player_speed = 5

enemy_size = enemy_img.get_rect().size
enemy_list = []
enemy_speed = 3

bullet_size = bullet_img.get_rect().size
bullet_speed = 7

# 定义游戏角色类
class Tank:
    def __init__(self, x, y, img):
        self.x = x
        self.y = y
        self.img = img
        self.speed = player_speed
    
    def move_left(self):
        self.x -= self.speed
        if self.x < 0:
            self.x = 0
    
    def move_right(self):
        self.x += self.speed
        if self.x > win_size[0] - player_size[0]:
            self.x = win_size[0] - player_size[0]
    
    def draw(self):
        win.blit(self.img, (self.x, self.y))

# 定义子弹类
class Bullet:
    def __init__(self, x, y):
        self.x = x
        self.y = y
        self.img = bullet_img
    
    def move(self):
        self.y -= bullet_speed
    
    def draw(self):
        win.blit(self.img, (self.x, self.y))

# 初始化玩家坦克和敌方坦克
player_tank = Tank(player_x, player_y, player_img)
for i in range(5):
    enemy_x = random.randint(0, win_size[0] - enemy_size[0])
    enemy_y = random.randint(0, win_size[1] // 2)
    enemy_tank = Tank(enemy_x, enemy_y, enemy_img)
    enemy_list.append(enemy_tank)

# 定义游戏循环
run = True
clock = pygame.time.Clock()

while run:
    clock.tick(60)

    # 获取键盘事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False
    
    # 获取键盘的输入值
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_tank.move_left()
    if keys[pygame.K_RIGHT]:
        player_tank.move_right()
    if keys[pygame.K_SPACE]:
        bullet_x = player_tank.x + player_size[0] // 2 - bullet_size[0] // 2
        bullet_y = player_tank.y
        bullet = Bullet(bullet_x, bullet_y)
        bullets.append(bullet)

    # 移动子弹
    for bullet in bullets:
        bullet.move()
        if bullet.y < 0:
            bullets.remove(bullet)

    # 移动敌方坦克
    for enemy_tank in enemy_list:
        enemy_tank.y += enemy_speed
        if enemy_tank.y > win_size[1]:
            enemy_tank.y = 0
            enemy_tank.x = random.randint(0, win_size[0] - enemy_size[0])

    # 检测子弹是否击中敌方坦克
    for bullet in bullets:
        for enemy_tank in enemy_list:
            if bullet.x > enemy_tank.x and bullet.x < enemy_tank.x + enemy_size[0]:
                if bullet.y > enemy_tank.y and bullet.y < enemy_tank.y + enemy_size[1]:
                    bullets.remove(bullet)
                    enemy_list.remove(enemy_tank)

    # 绘制游戏元素
    win.blit(bg_img, (0, 0))
    for bullet in bullets:
        bullet.draw()
    for enemy_tank in enemy_list:
        enemy_tank.draw()
    player_tank.draw()

    # 更新游戏窗口
    pygame.display.update()

# 退出游戏
pygame.quit()

这只是一个非常简单的示例代码,你可以进一步完善,添加新的元素(如音效、生命值、关卡等),以实现更加丰富的游戏功能。

五、五子棋

五子棋是一款非常经典的游戏,也可以使用Python来编写。以下是一个基本的五子棋游戏示例代码,获取源码关注我:

实现效果:
在这里插入图片描述

import pygame
import sys

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLOCK_SIZE = 40
MARGIN = 40
WIDTH = BLOCK_SIZE * 15 + MARGIN * 2
HEIGHT = BLOCK_SIZE * 15 + MARGIN * 2

# 初始化 pygame
pygame.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('五子棋')

# 画棋盘
def draw_board():
    for i in range(15):
        pygame.draw.line(screen, BLACK, [MARGIN + i * BLOCK_SIZE, MARGIN], 
                         [MARGIN + i * BLOCK_SIZE, HEIGHT - MARGIN], 1)
        pygame.draw.line(screen, BLACK, [MARGIN, MARGIN + i * BLOCK_SIZE], 
                        [WIDTH - MARGIN, MARGIN + i * BLOCK_SIZE], 1)

# 画棋子
def draw_piece(board):
    for row in range(15):
        for col in range(15):
            if board[row][col] == 1:
                pygame.draw.circle(screen, BLACK, [MARGIN + col * BLOCK_SIZE, MARGIN + row * BLOCK_SIZE], BLOCK_SIZE // 2 -2)
            elif board[row][col] == 2:
                pygame.draw.circle(screen, WHITE, [MARGIN + col * BLOCK_SIZE, MARGIN + row * BLOCK_SIZE], BLOCK_SIZE // 2 -2)

def is_win(board):
    # 横向连续五子
    for row in range(15):
        for col in range(11):
            if board[row][col] == board[row][col+1] == board[row][col+2] == board[row][col+3] == board[row][col+4] and board[row][col] != 0:
                return True
    # 纵向连续五子
    for row in range(11):
        for col in range(15):
            if board[row][col] == board[row+1][col] == board[row+2][col] == board[row+3][col] == board[row+4][col] and board[row][col] != 0:
                return True
    # 右斜向连续五子
    for row in range(11):
        for col in range(11):
            if board[row][col] == board[row+1][col+1] == board[row+2][col+2] == board[row+3][col+3] == board[row+4][col+4] and board[row][col] != 0:
                return True
    # 左斜向连续五子
    for row in range(11):
        for col in range(4, 15):
            if board[row][col] == board[row+1][col-1] == board[row+2][col-2] == board[row+3][col-3] == board[row+4][col-4] and board[row][col] != 0:
                return True
    return False

def main():
    board = [[0 for i in range(15)] for j in range(15)]
    turn = 1
    draw_board()
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            if event.type == pygame.MOUSEBUTTONDOWN:
                x, y = pygame.mouse.get_pos()
                col = (x - MARGIN) // BLOCK_SIZE
                row = (y - MARGIN) // BLOCK_SIZE
                if board[row][col] == 0:
                    board[row][col] = turn
                    if is_win(board):
                        print('Player %d wins!' % (turn))
                        sys.exit()
                    if turn == 1:
                        turn = 2
                    else:
                        turn =1
                    draw_piece(board)
                    pygame.display.flip()
main()

这是一个非常简单的示例代码,你可以根据自己的需求,进一步完善、美化该代码。

在这里插入图片描述

↓ ↓ ↓ 加下方名片找我,直接拿源码还有案例 ↓ ↓ ↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1077467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

js高级(2)函数的柯里化,cookie的使用,10天免登录案例,购物车案例,拖动盒子小案例等等

1.函数的柯里化 自定义函数的柯里化 // 自定义函数的柯里化function curry(fn) {//判断输入的函数有几个参数let len fn.length;// 返回一个函数,并且有函数名为treturn function t() {// 获取到实参的个数let innerLength arguments.length// 获取到真实参数,转化为数组[.…

FPGA---UDP通信求助

项目场景&#xff1a; 使用UDP进行回环&#xff0c;网络调试助手&#xff0c;发送数据通过UDP接收模块接收&#xff0c;解析出数据&#xff0c;给到UDP发送模块&#xff0c;传回上位机。 问题描述 UDP接收模块中&#xff0c;接收到的CRC校验值与自己计算CRC校验值进行判断&am…

【电商API接口的应用:电商数据分析入门】初识Web API(一)

如何使用Web应用变成接口(API)自动请求网站到特定信息而不是整个网站&#xff0c;再对这些信息进行可视化。由于这样编写到程序始终使用最新到数据来生成可视化&#xff0c;因此即便数据瞬息万变&#xff0c;它呈现到信息也都是最新的。 使用Web API Web API是网站的一部分&am…

javapoet 注释中添加枚举值

问题描述 使用javapoet生成源代码 为了实现这么一个目的 解决 翻了一下源代码&#xff0c;他的实现如下&#xff1a; 这个方法是私有的&#xff0c;暂时不确定如何调用 照着这个方法&#xff0c;即可实现大多数类型的基本调用 即可实现上图需要的效果

为Yolov7环境安装Cuba匹配的Pytorch

1. 查看Cuba版本 方法一 nvidia-smi 找到CUDA Version 方法二 Nvidia Control Panel > 系统信息 > 组件 > 2. 安装Cuba匹配版本的PyTorch https://pytorch.org/get-started/locally/这里使用conda安装 conda install pytorch torchvision torchaudio pytorch-cu…

[华为认证]路由表和FIB表

路由器转发数据包的关键是路由表和FIB表&#xff0c;每个路由器都至少保存着一张路由表和一张FIB&#xff08;Forwarding Information Base&#xff09;表。路由器通过路由表选择路由&#xff0c;通过FIB表指导报文进行转发。 路由表 每台路由器中都保存着一张本地核心路由表&…

Java学数据结构(4)——PriorityQueue(优先队列) 二叉堆(binary heap)

前言 数据结构与算法作为计算机科学的基础&#xff0c;是一个重点和难点&#xff0c;在实际编程中似乎看不它们的身影&#xff0c;但是它们有随处不在&#xff0c;如影随形。 本系列博客是《数据结构与算法分析—Java语言描述》的读书笔记&#xff0c;合集文章列表如下&#…

delphi socket cross开源跨平台通讯库

delphi socket cross是Pascal开源跨平台的tcp通讯组件 windows下用的iocp linux下用的epoll 支持http&#xff0c;https 开源地址&#xff1a;GitHub - winddriver/Delphi-Cross-Socket: Delphi cross platform socket library 下图来自网络&#xff1a;

陪诊系统|陪诊系统解放繁琐,为陪诊添便利

在当代快节奏的生活中&#xff0c;随着医疗服务的不断发展&#xff0c;陪诊成为了越来越多人的需求。然而&#xff0c;传统的陪诊方式却存在着时间成本高、沟通不畅、服务体验差等问题。但近年来&#xff0c;陪诊小程序的兴起却为这一难题提供了创新的解决方案。 陪诊小程序&a…

Congestion Control for Large-Scale RDMA Deployments

文章目录 IntroductionDCQCNBuffer Setting Introduction PFC是粗粒度的流量控制机制&#xff0c;在端口层面发挥作用&#xff0c;不区别不同的流。这会导致很多弊端&#xff0c;比如不公平&#xff0c;受害流等。 解决PFC限制的解决方法是flow-level的拥塞控制&#xff0c;D…

拥抱AI变革,实现企业数字化重生!

在当今这个数字化快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;正在逐渐成为企业转型的核心驱动力。本文将探讨AI如何在企业数字化转型中发挥重要作用&#xff0c;以及应对数字化转型中可能出现的风险和挑战。 目前&#xff0c;企业数字化转型的趋势日益明显…

如何更改照片底色(免费)

一、小程序截图 ①微信上找证件照的小程序&#xff0c;比如“独九证件照” ②换底色然后上传照片&#xff1a; ③ 原图&#xff1a; 换底色后的图&#xff1a; ④截图&#xff1a; ⑤裁剪 然后就得到免费的换底片后的证件照了。 二、PS修改 方法一&#xff08;更建议用&…

VueRouter与expres/koa中间件的关联

ueRouter: runQueue 路由守卫都是有三个参数to,from,next。其中next就是下方的fn执行时候传入的第二个参数(回调函数)&#xff0c;只有该回调执行后才会挨个遍历queue内的守卫。 中间件的作用 隔离基础设施与业务逻辑之间的细节。详细的内容位于《深入浅出Node.js》P210 另外一…

408-2014

一、单项选择题 1.下列程序段的时间复杂度是_______。 count0; for(k1;k<n;kk*2)for(j1;j<n;j)count; A.O() B.O(n) C.O() D.O(n*n) 解答&#xff1a;C 外层循环的时间复杂度为 O() &#xff0c;内层循环的时间复杂度为 O(n)&#xff0c;因此结果…

Matlab图像处理——基于机器视觉的苹果中心花及边花识别

一、简介 基于机器视觉技术&#xff0c;实现苹果中心花及边花识别&#xff0c;并将程序集合为GUI界面&#xff0c;在界面上完成相应的操作。实现了对图像进行预处理&#xff0c;分割出花心和边花&#xff0c;然后统计边花的数量。并且可以根据自己的需求和图像的特性来调整阈值…

idea中使用git【图文详解】

配置 配置Git 设置——Version Control——Git——Path to Git executab【D:\Git\Git\bin\git.exe】 创建Git查看 最上面VCS——Create Git Repository 添加忽略项 安装ignore插件&#xff1a;设置——plugins——搜索ignore 新建ignore文件&#xff1a;右击项目——new——.…

Hazelcast系列(三):hazelcast集成(服务器/客户端)

系列文章 Hazelcast系列(一)&#xff1a;初识hazelcast Hazelcast系列(二)&#xff1a;hazelcast集成&#xff08;嵌入式&#xff09; Hazelcast系列(三)&#xff1a;hazelcast集成&#xff08;服务器/客户端&#xff09; Hazelcast系列(四)&#xff1a;hazelcast管理中心 …

紫光同创FPGA 多路视频处理:图像缩放+视频拼接显示,OV7725采集,提供PDS工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐FPGA图像缩放方案推荐FPGA视频拼接叠加融合方案推荐紫光同创FPGA图像采集方案推荐紫光同创FPGA图像缩放方案推荐紫光同创FPGA视频拼接方案推荐 3、设计思路框架为什么选择OV7725摄像头&#xff1f;视频源选择OV7725摄像头配置及采集动态彩…

JUC学习笔记

基础知识 线程 线程是进程中的一个实体&#xff0c;线程本身是不会独立存在的。一个进程中至少有一个线程&#xff0c;进程中的多个线程共享进程的资源。 进程 是程序的一次执行&#xff0c;是系统进行资源分配和调度的基本单位。每一个进程都有自己独立的内存空间和系统资…

2023年下半年WSK-PETS5报名启动

2023年下半年全国外语水平考试&#xff08;WSK-PETS5&#xff09;网上报名时间为10月17日9时-10月19日16时&#xff0c;知识人网小编特别提醒考生注意报名截止时间是16点&#xff08;下午4点&#xff09;&#xff0c;切勿错过&#xff01; 国家公派留学人员全国外语水平考试&am…