用deepseek coder尝试制作打砖块游戏 c++ SDL2 (1)
deepseek coder使用体验,
开发环境 windows10,vscode,continue(远程连接deepseek), mingw, SDL2
按照 输入/输出响应顺序,记录如下
第1句输入: “打砖块代码,windows上,用SDL2”
代码编译出现错误,是典型的windows上gcc连接sdl2库的错误,找不到winmain,mingw-gcc默认main为入口函数,本次给的代码没有避开这个问题
第2句输入:在windows中,你上次产生的代码应该使用宏SDL_MAIN_HANDLED
虽然声称解决了问题,但是产生的代码还是老的连接问题,因此继需沟通
第3句输入:你的最新代码仍然没有使用宏\”SDL_MAIN_HANDLED\”,请检查一下
这回真的解决了问题,编译后代码运行如下图,左右按键控制挡板左右,全是白白的一片,继续改
第4句输入: 挡板颜色蓝色,砖块颜色黄色,小球颜色红色,小球请画成圆形的,挡板移动速度是原来的2倍,挡板长度是原来的2倍,小球移动速度是原来的2倍
改后效果,颜色变了,但是挡板和球的移动速度都没有变,又发现砖块显示和窗口没有对齐,继续改
第5句: 上次代码,最右边一列砖块显示不完整,请修复这个问题
显示问题,改好了,砖块正好填满对齐窗口
第6句调整挡板移动速度为原来的2倍,调整挡板长度为原来的3倍,小球速度移动为原来的2倍
修改后,挡板确实改好了,但是挡板和小球的速度都没有明显变化
目前存在问题,挡板和球速度都太慢,碰撞检测不好,出现图像重合,没有声音,画面不炫酷,可能需要贴图
这会deepseek服务器暂时连不上,待续
使用Pygame制作的简单打砖块游戏示例
这个游戏包含以下功能:
- 玩家可以通过左右方向键控制挡板移动
- 球会自动运动并与挡板、砖块和墙壁产生碰撞
- 击碎砖块可以获得分数
- 有生命值系统,球掉到底部会扣减生命
- 游戏结束可以显示提示信息
- 包含简单的计分系统
游戏规则:
- 用挡板反弹球击碎砖块
- 每次击碎砖块得10分
- 有3次生命机会
- 球掉到底部会损失生命
- 生命值为0时游戏结束
要运行这个游戏,需要:
- 安装Pygame库:pip install pygame
- 将代码保存为.py文件
- 运行该文件
可以自行调整以下参数来修改游戏难度:
- 修改ball_speed_x和ball_speed_y调整球速
- 修改paddle_speed调整挡板移动速度
- 修改brick_rows和brick_cols调整砖块数量
- 修改lives调整初始生命值
具体代码如下:
import pygame
import random
初始化Pygame
pygame.init()
游戏窗口设置
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption(\”打砖块游戏\”)
颜色定义
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
YELLOW = (255, 255, 0)
BLACK = (0, 0, 0)
挡板设置
paddle_width = 100
paddle_height = 20
paddle_speed = 10
paddle = pygame.Rect(WIDTH//2 – paddle_width//2, HEIGHT – 50, paddle_width, paddle_height)
球设置
ball_radius = 10
ball_speed_x = 5 * random.choice([-1, 1])
ball_speed_y = -5
ball = pygame.Rect(WIDTH//2 – ball_radius, HEIGHT//2 – ball_radius, ball_radius*2, ball_radius*2)
砖块设置
brick_rows = 5
brick_cols = 10
brick_width = WIDTH // brick_cols – 5
brick_height = 20
bricks = []
for row in range(brick_rows):
for col in range(brick_cols):
brick = pygame.Rect(col * (brick_width + 5) + 3, row * (brick_height + 5) + 50, brick_width, brick_height)
bricks.append(brick)
游戏状态
score = 0
lives = 3
game_over = False
字体设置
font = pygame.font.Font(None, 36)
游戏主循环
clock = pygame.time.Clock()
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if not game_over:
挡板移动控制
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and paddle.left > 0:
paddle.left -= paddle_speed
if keys[pygame.K_RIGHT] and paddle.right < WIDTH:
paddle.right += paddle_speed
球的移动
ball.x += ball_speed_x
ball.y += ball_speed_y
碰撞检测(墙壁)
if ball.left <= 0 or ball.right>= WIDTH:
ball_speed_x *= -1
if ball.top <= 0:
ball_speed_y *= -1
碰撞检测(挡板)
if ball.colliderect(paddle) and ball_speed_y > 0:
ball_speed_y *= -1
碰撞检测(砖块)
for brick in bricks[:]:
if ball.colliderect(brick):
ball_speed_y *= -1
bricks.remove(brick)
score += 10
break
生命值检测
if ball.bottom >= HEIGHT:
lives -= 1
if lives <= 0:
game_over = True
else:
重置球的位置
ball.center = (WIDTH//2, HEIGHT//2)
ball_speed_x = 5 * random.choice([-1, 1])
ball_speed_y = -5
绘制游戏元素
screen.fill(BLACK)
绘制挡板
pygame.draw.rect(screen, BLUE, paddle)
绘制球
pygame.draw.ellipse(screen, RED, ball)
绘制砖块
for brick in bricks:
pygame.draw.rect(screen, YELLOW, brick)
绘制分数和生命值
score_text = font.render(f\”Score: {score}\”, True, WHITE)
lives_text = font.render(f\”Lives: {lives}\”, True, WHITE)
screen.blit(score_text, (10, 10))
screen.blit(lives_text, (WIDTH – 120, 10))
游戏结束显示
if game_over:
game_over_text = font.render(\”Game Over! Press R to restart\”, True, WHITE)
screen.blit(game_over_text, (WIDTH//2 – 200, HEIGHT//2))
pygame.display.flip()
clock.tick(60)
pygame.quit()
标题:打砖块游戏经典版、打砖块游戏大全
链接:https://www.52funs.com/news/gl/45128.html
版权:文章转载自网络,如有侵权,请联系删除!