Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import curses
- import time
- import random
- def main(stdscr):
- curses.curs_set(0) # Hide the cursor
- stdscr.nodelay(1) # Make getch non-blocking
- height, width = stdscr.getmaxyx()
- player_y = height // 2
- player_x = 3
- score = 0
- enemies = []
- bullets = []
- game_over = False
- # Define multi-line characters
- player_char = [
- " /\\",
- " |^^|",
- " |{}|",
- " _______________/~~\\________________",
- " / | | \\",
- "`========--------. .---------========'",
- " ||||",
- " ||",
- " ||",
- " ||",
- " ||",
- " ,---||---,",
- " '---<>---'"
- ]
- bullet_char = "|"
- enemy_char = [
- " {│} ",
- " │ ",
- " │ ",
- " $ ",
- " \\▼/ "
- ]
- def draw_player():
- for i, line in enumerate(player_char):
- stdscr.addstr(player_y + i, player_x, line)
- def draw_bullets():
- for bullet in bullets:
- stdscr.addstr(bullet[0], bullet[1], bullet_char)
- def draw_enemies():
- for enemy in enemies:
- for i, line in enumerate(enemy_char):
- stdscr.addstr(enemy[0] + i, enemy[1], line)
- def move_bullets():
- nonlocal bullets
- new_bullets = []
- for bullet in bullets:
- if bullet[1] < width - 1:
- new_bullets.append((bullet[0], bullet[1] + 1))
- bullets = new_bullets
- def move_enemies():
- nonlocal enemies
- new_enemies = []
- for enemy in enemies:
- if enemy[1] > 0:
- new_enemies.append((enemy[0], enemy[1] - 1))
- enemies = new_enemies
- def check_collision():
- nonlocal game_over, score
- for enemy in enemies:
- for i in range(len(enemy_char)):
- if (enemy[0] + i == player_y and enemy[1] <= player_x + len(player_char[0])):
- game_over = True
- for bullet in bullets:
- for enemy in enemies:
- for i in range(len(enemy_char)):
- if (bullet[0] == enemy[0] + i and bullet[1] == enemy[1] + len(enemy_char[0])):
- bullets.remove(bullet)
- enemies.remove(enemy)
- score += 10
- def game_over_screen():
- stdscr.clear()
- stdscr.addstr(height // 2, width // 2 - 5, f"Game Over! Score: {score}")
- stdscr.refresh()
- time.sleep(2)
- # Variables to control player movement speed
- player_speed = 1 # Move 1 character every 0.1 seconds
- player_move_countdown = 0
- while not game_over:
- stdscr.clear()
- draw_player()
- draw_bullets()
- draw_enemies()
- stdscr.addstr(0, width - 10, f"Score: {score}")
- stdscr.refresh()
- move_bullets()
- move_enemies()
- check_collision()
- # Generate enemies randomly
- if random.randint(0, 10) > 7:
- enemies.append((random.randint(1, height - len(enemy_char)), width - len(enemy_char[0])))
- # User input
- key = stdscr.getch()
- if key == curses.KEY_UP and player_y > 0:
- player_y -= 1
- elif key == curses.KEY_DOWN and player_y < height - len(player_char):
- player_y += 1
- elif key == ord(' ') and len(bullets) < 5:
- bullets.append((player_y + 6, player_x + len(player_char[0])))
- # Player movement logic
- player_move_countdown += 1
- if player_move_countdown >= 10 // player_speed: # 10 ticks per second, adjust speed accordingly
- player_x += 1
- player_move_countdown = 0
- time.sleep(0.1)
- game_over_screen()
- if __name__ == "__main__":
- curses.wrapper(main)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement