
python游戏
6
·
垃圾蛇
import pygame
import time
import random
# 初始化pygame
pygame.init()
# 设置屏幕宽度和高度
width, height = 600, 400
screen = pygame.display.set_mode((width, height))
# 设置颜色
black = (0, 0, 0)
white = (255, 255, 255)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
# 设置蛇的大小和速度
snake_block = 10
snake_speed = 15
# 设置字体
font_style = pygame.font.SysFont(None, 35)
score_font = pygame.font.SysFont(None, 35)
def Your_score(score):
value = score_font.render("Your Score: " + str(score), True, white)
screen.blit(value, [0, 0])
def our_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(screen, black, [x[0], x[1], snake_block, snake_block])
def message(msg, color):
mesg = font_style.render(msg, True, color)
screen.blit(mesg, [width / 6, height / 3])
def gameLoop():
game_over = False
game_close = False
x1 = width / 2
y1 = height / 2
x1_change = 0
y1_change = 0
snake_List = []
Length_of_snake = 1
foodx = round(random.randrange(0, width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block) / 10.0) * 10.0
score = 0
clock = pygame.time.Clock()
while not game_over:
while game_close == True:
screen.fill(blue)
message("You Lost! Press Q-Quit or C-Play Again", red)
Your_score(score)
pygame.display.update()
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
game_over = True
game_close = False
if event.key == pygame.K_c:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
game_over = True
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
x1_change = -snake_block
y1_change = 0
elif event.key == pygame.K_RIGHT:
x1_change = snake_block
y1_change = 0
elif event.key == pygame.K_UP:
y1_change = -snake_block
x1_change = 0
elif event.key == pygame.K_DOWN:
y1_change = snake_block
x1_change = 0
if x1 >= width or x1 < 0 or y1 >= height or y1 < 0:
game_close = True
x1 += x1_change
y1 += y1_change
screen.fill(blue)
pygame.draw.rect(screen, green, [foodx, foody, snake_block, snake_block])
snake_Head = []
snake_Head.append(x1)
snake_Head.append(y1)
snake_List.append(snake_Head)
if len(snake_List) > Length_of_snake:
del snake_List[0]
for x in snake_List[:-1]:
if x == snake_Head:
game_close = True
our_snake(snake_block, snake_List)
Your_score(score)
pygame.display.update()
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, width - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, height - snake_block) / 10.0) * 10.0
Length_of_snake += 1
score += 10 # 每吃到一个食物增加10分
clock.tick(snake_speed)
pygame.quit()
quit()
gameLoop()
垃圾方块
import pygame
import random
import sys
# Initialize Pygame
pygame.init()
# Colors
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
CYAN = (0, 255, 255)
YELLOW = (255, 255, 0)
MAGENTA = (255, 0, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
ORANGE = (255, 165, 0)
# Game settings
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
BLOCK_SIZE = 30
GRID_WIDTH = 10
GRID_HEIGHT = 20
# Create game window
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Tetris")
# Define shapes
SHAPES = [
[[1, 1, 1, 1]],
[[1, 1], [1, 1]],
[[1, 1, 1], [0, 1, 0]],
[[1, 1, 1], [1, 0, 0]],
[[1, 1, 1], [0, 0, 1]],
[[1, 1, 0], [0, 1, 1]],
[[0, 1, 1], [1, 1, 0]]
]
# Define colors
COLORS = [CYAN, YELLOW, MAGENTA, RED, GREEN, BLUE, ORANGE]
# Set up fonts
FONT = pygame.font.Font(None, 36)
LARGE_FONT = pygame.font.Font(None, 48)
class Tetromino:
def __init__(self):
self.shape = random.choice(SHAPES)
self.color = random.choice(COLORS)
self.x = GRID_WIDTH // 2 - len(self.shape[0]) // 2
self.y = 0
def move(self, dx, dy):
self.x += dx
self.y += dy
def rotate(self):
self.shape = list(zip(*self.shape[::-1]))
class TetrisGame:
def __init__(self):
self.reset_game()
def reset_game(self):
self.grid = [[0 for _ in range(GRID_WIDTH)] for _ in range(GRID_HEIGHT)]
self.current_piece = Tetromino()
self.game_over = False
self.score = 0
self.fall_time = 0
self.fall_speed = 0.5 # seconds
self.fast_fall = False
def draw(self):
screen.fill(BLACK)
self.draw_grid()
self.draw_current_piece()
self.draw_score()
if self.game_over:
self.draw_game_over()
pygame.display.flip()
def draw_grid(self):
for y, row in enumerate(self.grid):
for x, cell in enumerate(row):
if cell:
pygame.draw.rect(screen, cell, (x * BLOCK_SIZE, y * BLOCK_SIZE, BLOCK_SIZE - 1, BLOCK_SIZE - 1))
def draw_current_piece(self):
for y, row in enumerate(self.current_piece.shape):
for x, cell in enumerate(row):
if cell:
pygame.draw.rect(screen, self.current_piece.color,
((self.current_piece.x + x) * BLOCK_SIZE,
(self.current_piece.y + y) * BLOCK_SIZE,
BLOCK_SIZE - 1, BLOCK_SIZE - 1))
def draw_score(self):
score_text = FONT.render(f"Score: {self.score}", True, WHITE)
screen.blit(score_text, (10, 10))
def draw_game_over(self):
game_over_text = LARGE_FONT.render("Game Over!", True, WHITE)
restart_text = FONT.render("Press SPACE to restart", True, WHITE)
screen.blit(game_over_text, (SCREEN_WIDTH // 2 - game_over_text.get_width() // 2, SCREEN_HEIGHT // 2 - 50))
screen.blit(restart_text, (SCREEN_WIDTH // 2 - restart_text.get_width() // 2, SCREEN_HEIGHT // 2 + 10))
def move_piece(self, dx, dy):
self.current_piece.move(dx, dy)
if self.check_collision():
self.current_piece.move(-dx, -dy)
if dy > 0:
self.lock_piece()
return True
return False
def rotate_piece(self):
original_shape = self.current_piece.shape
self.current_piece.rotate()
if self.check_collision():
self.current_piece.shape = original_shape
def check_collision(self):
for y, row in enumerate(self.current_piece.shape):
for x, cell in enumerate(row):
if cell:
if (self.current_piece.x + x < 0 or
self.current_piece.x + x >= GRID_WIDTH or
self.current_piece.y + y >= GRID_HEIGHT or
(self.current_piece.y + y >= 0 and self.grid[self.current_piece.y + y][
self.current_piece.x + x])):
return True
return False
def lock_piece(self):
for y, row in enumerate(self.current_piece.shape):
for x, cell in enumerate(row):
if cell:
if 0 <= self.current_piece.y + y < GRID_HEIGHT:
self.grid[self.current_piece.y + y][self.current_piece.x + x] = self.current_piece.color
self.clear_lines()
self.current_piece = Tetromino()
if self.check_collision():
self.game_over = True
def clear_lines(self):
lines_cleared = 0
for y in range(GRID_HEIGHT - 1, -1, -1):
if all(self.grid[y]):
del self.grid[y]
self.grid.insert(0, [0 for _ in range(GRID_WIDTH)])
lines_cleared += 1
self.score += lines_cleared ** 2 * 100
def update(self, dt):
self.fall_time += dt
if self.fast_fall:
fall_speed = self.fall_speed / 10
else:
fall_speed = self.fall_speed
if self.fall_time > fall_speed:
if self.move_piece(0, 1):
self.fast_fall = False
self.fall_time = 0
def run(self):
clock = pygame.time.Clock()
while True:
dt = clock.tick(60) / 1000.0 # Convert to seconds
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
if event.type == pygame.KEYDOWN:
if not self.game_over:
if event.key == pygame.K_LEFT:
self.move_piece(-1, 0)
elif event.key == pygame.K_RIGHT:
self.move_piece(1, 0)
elif event.key == pygame.K_DOWN:
self.fast_fall = True
elif event.key == pygame.K_UP:
self.rotate_piece()
if event.key == pygame.K_SPACE:
self.reset_game()
if event.type == pygame.KEYUP:
if event.key == pygame.K_DOWN:
self.fast_fall = False
if not self.game_over:
self.update(dt)
self.draw()
if __name__ == "__main__":
game = TetrisGame()
game.run()
飞机
import pygame
import random
import sys
# Initialize Pygame
pygame.init()
# Set up the game window
WIDTH = 800
HEIGHT = 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Space Shooter")
# Load images
player_img = pygame.image.load("1.png").convert_alpha()
bullet_img = pygame.image.load("2.png").convert_alpha()
enemy_img = pygame.image.load("3.png").convert_alpha()
# Scale images if needed
player_img = pygame.transform.scale(player_img, (50, 50))
bullet_img = pygame.transform.scale(bullet_img, (10, 20))
enemy_img = pygame.transform.scale(enemy_img, (50, 50))
# Define colors
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
# Define constants
BULLET_INTERVAL = 10 # Interval in milliseconds
ENEMY_COUNT = 3 # Number of enemies
# Player class
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = player_img
self.rect = self.image.get_rect()
self.rect.centerx = WIDTH // 2
self.rect.bottom = HEIGHT - 10
self.speed = 15
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and self.rect.left > 0:
self.rect.x -= self.speed
if keys[pygame.K_RIGHT] and self.rect.right < WIDTH:
self.rect.x += self.speed
if keys[pygame.K_UP] and self.rect.top > 0:
self.rect.y -= self.speed
if keys[pygame.K_DOWN] and self.rect.bottom < HEIGHT:
self.rect.y += self.speed
def shoot(self):
return Bullet(self.rect.centerx, self.rect.top)
# Bullet class
class Bullet(pygame.sprite.Sprite):
def __init__(self, x, y):
super().__init__()
self.image = bullet_img
self.rect = self.image.get_rect()
self.rect.centerx = x
self.rect.bottom = y
self.speed = -35
def update(self):
self.rect.y += self.speed
if self.rect.bottom < 0:
self.kill()
# Enemy class
class Enemy(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = enemy_img
self.rect = self.image.get_rect()
self.rect.x = random.randint(0, WIDTH - self.rect.width)
self.rect.y = random.randint(-100, -40)
self.speed = random.randint(1, 3)
def update(self):
self.rect.y += self.speed
if self.rect.top > HEIGHT:
self.kill()
return True
return False
# Create sprite groups
all_sprites = pygame.sprite.Group()
bullets = pygame.sprite.Group()
enemies = pygame.sprite.Group()
def new_game():
global player, score, last_bullet_time
all_sprites.empty()
bullets.empty()
enemies.empty()
# Create player
player = Player()
all_sprites.add(player)
# Create enemies
for i in range(ENEMY_COUNT):
enemy = Enemy()
all_sprites.add(enemy)
enemies.add(enemy)
# Initialize score and bullet timer
score = 0
last_bullet_time = pygame.time.get_ticks()
# Initial game setup
new_game()
# Set up the game clock
clock = pygame.time.Clock()
# Set up the font for the score
font = pygame.font.Font(None, 36)
# Game loop
def game_loop():
global running, score, last_bullet_time
running = True
while running:
# Keep the loop running at the right speed
clock.tick(60)
# Process input (events)
for event in pygame.event.get():
if event.type == pygame.QUIT:
return False # Quit the game
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_ESCAPE:
return False # Quit the game
# Automatic shooting
current_time = pygame.time.get_ticks()
if current_time - last_bullet_time > BULLET_INTERVAL:
bullet = player.shoot()
all_sprites.add(bullet)
bullets.add(bullet)
last_bullet_time = current_time
# Update
all_sprites.update()
# Check for enemies passing through the bottom
for enemy in enemies:
if enemy.update():
running = False
break
# Check for collisions between bullets and enemies
hits = pygame.sprite.groupcollide(enemies, bullets, True, True)
for hit in hits:
score += 10
enemy = Enemy()
all_sprites.add(enemy)
enemies.add(enemy)
# Check for collisions between player and enemies
hits = pygame.sprite.spritecollide(player, enemies, False)
if hits:
running = False
# Draw / render
screen.fill(BLACK)
all_sprites.draw(screen)
# Draw score
score_text = font.render(f"Score: {score}", True, WHITE)
screen.blit(score_text, (10, 10))
# Flip the display
pygame.display.flip()
return True # Continue to game over screen
# Main game loop
while True:
if game_loop():
# Game over screen
screen.fill(BLACK)
game_over_text = font.render("Game Over", True, WHITE)
score_text = font.render(f"Final Score: {score}", True, WHITE)
restart_text = font.render("Press R to restart or Q to quit", True, WHITE)
screen.blit(game_over_text, (WIDTH // 2 - game_over_text.get_width() // 2, HEIGHT // 2 - 50))
screen.blit(score_text, (WIDTH // 2 - score_text.get_width() // 2, HEIGHT // 2))
screen.blit(restart_text, (WIDTH // 2 - restart_text.get_width() // 2, HEIGHT // 2 + 50))
pygame.display.flip()
# Wait for restart or quit
waiting = True
while waiting:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_r:
# Restart the game
new_game()
waiting = False
elif event.key == pygame.K_q:
pygame.quit()
sys.exit()
else:
break
pygame.quit()
sys.exit()
更多推荐
所有评论(0)