python编写一个弹球游戏_Python弹球游戏(tkinter模块编写)

from tkinter import *

from tkinter import messagebox

import random

import time

class Ball:

def __init__(self, canvas, paddle, color):

self.canvas = canvas

self.paddle = paddle

self.id = canvas.create_oval(10, 10, 25, 25, fill=color)

self.canvas.move(self.id, 245, 100)

startx = [-3, -2, -1, 1, 2, 3]

random.shuffle(startx)

self.x = startx[0]

self.y = -3

self.canvas_height = self.canvas.winfo_height()

self.canvas_width = self.canvas.winfo_width()

self.hit_bottom = False

def draw(self):

self.canvas.move(self.id, self.x, self.y)

pos = self.canvas.coords(self.id) # top-left bottom-right

if pos[1] <= 0 or self.hit_paddle(pos) == True:

self.y = -self.y

if pos[0] <= 0 or pos[2] >= self.canvas_width:

self.x = -self.x

if pos[3] >= self.canvas_height:

self.hit_bottom = True

def hit_paddle(self, pos):

global score

paddle_pos = self.canvas.coords(self.paddle.id)

if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:

if pos[3] >= paddle_pos[1] and pos[3] <= paddle_pos[3]:

score += 1

return True

return False

class Paddle:

def __init__(self, canvas, color,width):

self.canvas = canvas

self.id = canvas.create_rectangle(0, 0, width, 10, fill=color)

self.x = 0

self.y = 0

self.canvas.move(self.id, 200, 300)

self.canvas_width = self.canvas.winfo_width()

self.canvas.bind_all("", self.turn_left)

self.canvas.bind_all("", self.turn_right)

def draw(self):

pos = self.canvas.coords(self.id)

if pos[0] + self.x >= 0 and pos[2] + self.x <= self.canvas_width:

self.canvas.move(self.id, self.x, 0)

# self.x = 0

def turn_left(self, event):

self.x = -4

def turn_right(self, event):

self.x = 4

width = 0

def test1():

global width2

width2 = 200

def test2():

global width2

width2 = 100

width2 = 100

score = 0

tk = Tk()

tk.title("Game")

tk.resizable(0, 0) # not resizable

tk.wm_attributes("-topmost", 1) # at top

btn1 = Button(tk, text='简单', command=test1)

btn2 = Button(tk, text='难', command=test2)

btn1.pack(side='left')

btn2.pack(side='left')

canvas = Canvas(tk, width=500, height=350, bd=0, highlightthickness=0)

canvas.pack()

canvas.create_line(1, 0, 1, 600, fill='red')

tk.update()

paddle = Paddle(canvas, 'blue', width2)

ball = Ball(canvas, paddle, 'red')

while True:

if ball.hit_bottom == False:

ball.draw()

paddle.draw()

else:

messagebox.showinfo(title='失败!', message="你的分数为:" + str(score))

break

tk.update_idletasks()

tk.update()

time.sleep(0.01)

好的,下面是一个简单的弹球游戏Python代码,使用了Pygame模块: ```python import pygame import random # 初始化Pygame pygame.init() # 游戏窗口大小 WINDOW_WIDTH = 600 WINDOW_HEIGHT = 600 # 定义颜色 WHITE = (255, 255, 255) BLACK = (0, 0, 0) RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) # 创建游戏窗口 WINDOW = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption("弹球游戏") # 创建小球类 class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color self.speed_x = random.randint(3, 6) self.speed_y = random.randint(3, 6) def move(self): self.x += self.speed_x self.y += self.speed_y # 检测小球是否触边界 if self.x + self.r > WINDOW_WIDTH or self.x - self.r < 0: self.speed_x = -self.speed_x if self.y + self.r > WINDOW_HEIGHT or self.y - self.r < 0: self.speed_y = -self.speed_y def draw(self): pygame.draw.circle(WINDOW, self.color, (int(self.x), int(self.y)), self.r) # 创建挡板类 class Paddle: def __init__(self, x, y, w, h, color): self.x = x self.y = y self.w = w self.h = h self.color = color def draw(self): pygame.draw.rect(WINDOW, self.color, (self.x, self.y, self.w, self.h)) def move_left(self): self.x -= 5 if self.x < 0: self.x = 0 def move_right(self): self.x += 5 if self.x + self.w > WINDOW_WIDTH: self.x = WINDOW_WIDTH - self.w # 创建小球对象和挡板对象 ball = Ball(WINDOW_WIDTH/2, WINDOW_HEIGHT/2, 10, BLUE) paddle = Paddle(WINDOW_WIDTH/2-50, WINDOW_HEIGHT-20, 100, 10, GREEN) # 游戏主循环 while True: # 响应退出事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() # 检测挡板移动 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: paddle.move_left() if keys[pygame.K_RIGHT]: paddle.move_right() # 移动小球 ball.move() # 检测小球和挡板是否碰撞 if ball.y + ball.r > paddle.y and ball.x > paddle.x and ball.x < paddle.x + paddle.w: ball.speed_y = -ball.speed_y # 清屏 WINDOW.fill(WHITE) # 绘制小球和挡板 ball.draw() paddle.draw() # 更新屏幕 pygame.display.update() ``` 这是一个非常简单的弹球游戏,小球会在窗口中自动反弹,并且可以用左右箭头键控制挡板移动。你可以根据自己的需要对代码进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值