Advertisement
EdmundC

Untitled

Jul 15th, 2024 (edited)
31
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.05 KB | None | 0 0
  1. import curses
  2. import time
  3. import random
  4.  
  5. def main(stdscr):
  6.     curses.curs_set(0)  # Hide the cursor
  7.     stdscr.nodelay(1)   # Make getch non-blocking
  8.    
  9.     height, width = stdscr.getmaxyx()
  10.     player_y = height // 2
  11.     player_x = 3
  12.     score = 0
  13.     enemies = []
  14.     bullets = []
  15.     game_over = False
  16.    
  17.     # Define multi-line characters
  18.     player_char = [
  19.         "                  /\\",
  20.         "                 |^^|",
  21.         "                 |{}|",
  22.         "  _______________/~~\\________________",
  23.         " /               |  |                \\",
  24.         "`========--------.  .---------========'",
  25.         "                 ||||",
  26.         "                  ||",
  27.         "                  ||",
  28.         "                  ||",
  29.         "                  ||",
  30.         "              ,---||---,",
  31.         "              '---<>---'"
  32.     ]
  33.     bullet_char = "|"
  34.     enemy_char = [
  35.         " {│} ",
  36.         "  │  ",
  37.         "  │  ",
  38.         "  $  ",
  39.         " \\▼/ "
  40.     ]
  41.    
  42.     def draw_player():
  43.         for i, line in enumerate(player_char):
  44.             stdscr.addstr(player_y + i, player_x, line)
  45.    
  46.     def draw_bullets():
  47.         for bullet in bullets:
  48.             stdscr.addstr(bullet[0], bullet[1], bullet_char)
  49.    
  50.     def draw_enemies():
  51.         for enemy in enemies:
  52.             for i, line in enumerate(enemy_char):
  53.                 stdscr.addstr(enemy[0] + i, enemy[1], line)
  54.    
  55.     def move_bullets():
  56.         nonlocal bullets
  57.         new_bullets = []
  58.         for bullet in bullets:
  59.             if bullet[1] < width - 1:
  60.                 new_bullets.append((bullet[0], bullet[1] + 1))
  61.         bullets = new_bullets
  62.    
  63.     def move_enemies():
  64.         nonlocal enemies
  65.         new_enemies = []
  66.         for enemy in enemies:
  67.             if enemy[1] > 0:
  68.                 new_enemies.append((enemy[0], enemy[1] - 1))
  69.         enemies = new_enemies
  70.    
  71.     def check_collision():
  72.         nonlocal game_over, score
  73.         for enemy in enemies:
  74.             for i in range(len(enemy_char)):
  75.                 if (enemy[0] + i == player_y and enemy[1] <= player_x + len(player_char[0])):
  76.                     game_over = True
  77.         for bullet in bullets:
  78.             for enemy in enemies:
  79.                 for i in range(len(enemy_char)):
  80.                     if (bullet[0] == enemy[0] + i and bullet[1] == enemy[1] + len(enemy_char[0])):
  81.                         bullets.remove(bullet)
  82.                         enemies.remove(enemy)
  83.                         score += 10
  84.    
  85.     def game_over_screen():
  86.         stdscr.clear()
  87.         stdscr.addstr(height // 2, width // 2 - 5, f"Game Over! Score: {score}")
  88.         stdscr.refresh()
  89.         time.sleep(2)
  90.    
  91.     # Variables to control player movement speed
  92.     player_speed = 1  # Move 1 character every 0.1 seconds
  93.     player_move_countdown = 0
  94.    
  95.     while not game_over:
  96.         stdscr.clear()
  97.         draw_player()
  98.         draw_bullets()
  99.         draw_enemies()
  100.         stdscr.addstr(0, width - 10, f"Score: {score}")
  101.         stdscr.refresh()
  102.        
  103.         move_bullets()
  104.         move_enemies()
  105.         check_collision()
  106.        
  107.         # Generate enemies randomly
  108.         if random.randint(0, 10) > 7:
  109.             enemies.append((random.randint(1, height - len(enemy_char)), width - len(enemy_char[0])))
  110.        
  111.         # User input
  112.         key = stdscr.getch()
  113.         if key == curses.KEY_UP and player_y > 0:
  114.             player_y -= 1
  115.         elif key == curses.KEY_DOWN and player_y < height - len(player_char):
  116.             player_y += 1
  117.         elif key == ord(' ') and len(bullets) < 5:
  118.             bullets.append((player_y + 6, player_x + len(player_char[0])))
  119.        
  120.         # Player movement logic
  121.         player_move_countdown += 1
  122.         if player_move_countdown >= 10 // player_speed:  # 10 ticks per second, adjust speed accordingly
  123.             player_x += 1
  124.             player_move_countdown = 0
  125.        
  126.         time.sleep(0.1)
  127.    
  128.     game_over_screen()
  129.  
  130. if __name__ == "__main__":
  131.     curses.wrapper(main)
  132.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement