[Tutor] Random ai win glitch
Cravan
savageapple850 at gmail.com
Wed May 1 08:18:21 EDT 2019
Hi all,
I’m a beginner using python3, and recently learnt oop in pygame. What I’m trying to create is a tug of war game, but somehow my console prints Ai wins even before the player crosses the middle line.Here is my code:
newsettings.py:
# Basic colours
BLACK = ( 0, 0, 0)
WHITE = ( 255, 255, 255)
GREEN = ( 0, 255, 0)
RED = ( 255, 0, 0)
BLUE = ( 0, 0, 255)
YELLOW = ( 255, 255, 0)
ORANGE = ( 255, 165, 0)
PURPLE = ( 100, 0, 100)
#settings
WIDTH = 1024
HEIGHT = 768
FPS = 60
TITLE = "War of Tugs"
BGCOLOR = GREEN
spritesdata.py:
import pygame as pg
from os import path
import os
from newsettings import *
size = (WIDTH, HEIGHT)
screen = pg.display.set_mode(size)
pg.display.init()
game_folder = os.path.dirname(__file__)
resources_folder = os.path.join(game_folder, 'resources')
stickmanplayer_img = pg.image.load(os.path.join(resources_folder, 'stickmanplayer.png')).convert()
stickmanai_img = pg.image.load(os.path.join(resources_folder, 'stickmanai.png')).convert()
#https://www.shutterstock.com/image-vector/stick-figure-pulling-rope-coiled-1140317804?src=c7Vbr97B4rIRsJ9OYUVcLw-1-0
string = pg.sprite.Group()
all_sprites = pg.sprite.Group()
stickman_ai = pg.sprite.Group()
stickman_player = pg.sprite.Group()
AI_wins = 0
Player_wins = 0
class Player(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = stickmanplayer_img
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.dx = 1
def move_left(self,lol):
if self.rect.left > 10 and lol.rect.x > 310:
self.rect.x -= 30
lol.rect.x -= 30
else:
self.rect.left = 10
def update(self):
if self.rect.right < 770:
self.rect.x += self.dx
class AI(pg.sprite.Sprite):
def __init__(self, game, x, y):
self.groups = game.all_sprites
pg.sprite.Sprite.__init__(self, self.groups)
self.game = game
self.image = stickmanai_img
self.image.set_colorkey(BLACK)
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.dx = 1
def update(self):
if self.rect.right < 1000:
self.rect.x += self.dx
class String(pg.sprite.Sprite):
def __init__(self, game, x, y, height = 10, width = 320):
self.game = game
self.groups = game.all_sprites
pg.sprite.Sprite.__init__(self, self.groups)
self.height = height
self.width = width
self.surface = pg.Surface((2 * self.width, 2 * self.height))
self.surface.fill(YELLOW)
self.surface.set_colorkey(YELLOW)
pg.draw.line(self.surface, BLACK, [0,0], [self.width,0], self.height)
self.image = self.surface
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
self.dx = 1
def move_to_player(self):
if self.rect.left > 100:
self.rect.x -= 30
else:
self.rect.left = 100
def update(self):
if self.rect.right < 1300:
self.rect.x += self.dx
def check_win(self,lol):
global Player_wins
global AI_wins
if self.rect.right < lol.rect.x:
Player_wins += 1
print("player wins")
if self.rect.left > lol.rect.x:
AI_wins += 1
print("ai wins")
class Middle_Line(pg.sprite.Sprite):
def __init__(self, game, x):
self.game = game
self.groups = game.all_sprites
pg.sprite.Sprite.__init__(self, self.groups)
self.width = WIDTH + 100
self.height = HEIGHT
self.surface = pg.Surface((2 * self.width, 2 * self.height))
self.surface.fill(WHITE)
self.surface.set_colorkey(WHITE)
pg.draw.line(self.surface, RED, [200, 0], [200, self.height], 5)
self.image = self.surface
self.rect = self.image.get_rect()
self.rect.x = x
main.py:
import pygame as pg
import sys
import random
import math
import time
from os import path
from newsettings import *
from spritesdata import *
clock = pg.time.Clock()
Player_wins = 0
AI_wins = 0
class Game:
def __init__(self):
pg.init()
Player_wins = 0
AI_wins = 0
self.screen = pg.display.set_mode((WIDTH, HEIGHT))
pg.display.set_caption(TITLE)
self.clock = pg.time.Clock()
self.time = pg.time.get_ticks()
pg.key.set_repeat(500, 100)
self.all_sprites = pg.sprite.Group()
self.player = Player(self, 249, 384)
self.ai = AI(self, 550, 430)
self.middle_line = Middle_Line(self, 300)
self.string = String(self, 350, 500)
def run(self):
# game loop - set self.playing = False to end the game
self.playing = True
while self.playing:
self.dt = self.clock.tick(FPS) / 1000
self.events()
self.update()
self.draw()
def quit(self):
pg.quit()
sys.exit()
def update(self):
self.all_sprites.update()
self.string.check_win(self.middle_line)
self.all_sprites.update()
def draw(self):
self.screen.fill(BGCOLOR)
self.all_sprites.draw(self.screen)
font = pg.font.SysFont('Arial', 30, True, False)
text = font.render("PLAYER WINS:" + str(Player_wins), True, BLACK)
screen.blit(text, [50, 50])
font = pg.font.SysFont('Arial', 30, True, False)
text = font.render("AI WINS:" + str(AI_wins), True, BLACK)
screen.blit(text, [790, 50])
self.all_sprites.update()
pg.display.flip()
def events(self):
# catch all events here
for event in pg.event.get():
if event.type == pg.QUIT:
self.quit()
Apologise for the absence of > signs(im using atom
More information about the Tutor
mailing list