Game using python version 3

A forum for general discussion of the Python programming language.

Game using python version 3

Postby Esther » Tue Mar 12, 2013 5:48 pm

hi everyone
i am trying to implement a spaceship game using python 3.2.3, the codes runs or compiles but refuses to load the images using photoImage of the game. i cant call the drawing functions it gives me errors, need your assistance please
Esther
 
Posts: 9
Joined: Tue Mar 12, 2013 5:38 pm

Re: Game using python version 3

Postby metulburr » Tue Mar 12, 2013 5:54 pm

hi everyone
i am trying to implement a spaceship game using python 3.2.3, the codes runs or compiles but refuses to load the images using photoImage of the game. i cant call the drawing functions it gives me errors, need your assistance please

The code is?
The error is?
New Users, Read This
OS Ubuntu 14.04, Arch Linux, Gentoo, Windows 7/8
https://github.com/metulburr
steam
User avatar
metulburr
 
Posts: 1421
Joined: Thu Feb 07, 2013 4:47 pm
Location: Elmira, NY

Re: Game using python version 3

Postby Esther » Tue Mar 12, 2013 7:19 pm

code is:
Code: Select all
 def draw(self, canvas):
        canvas.create_image(self.image, self.image_center, self.image_size, self.pos, self.image_size, self.angle)
Esther
 
Posts: 9
Joined: Tue Mar 12, 2013 5:38 pm

Re: Game using python version 3

Postby Yoriz » Tue Mar 12, 2013 7:37 pm

Hi Esther,
That little bit of code is not enough to reproduce the error your getting.
Its like taking just your spare wheel into a garage and asking them why your car wont start.
Please read this this post on how to better get help http://python-forum.org/viewtopic.php?f=10&t=145
New Users, Read This
Join the #python-forum IRC channel on irc.freenode.net!
Spam topic disapproval technician
Windows7, Python 2.7.4., WxPython 2.9.5.0., some Python 3.3
User avatar
Yoriz
 
Posts: 784
Joined: Fri Feb 08, 2013 1:35 am
Location: UK

Re: Game using python version 3

Postby Esther » Tue Mar 12, 2013 8:41 pm

here is it:this code runs buh it doesnt load the images, it only loads the interface
Code: Select all
from tkinter import *
import tkinter
import winsound
import math
import random
root = Tk()
canvas = Canvas(root)
# globals for user interface
width = 800
height = 600
score = 0
lives = 3
time = 0


class ImageInfo:
    def __init__(self, center, size, radius = 0, lifespan = None, animated = False):
        self.center = center
        self.size = size
        self.radius = radius
        if lifespan:
            self.lifespan = lifespan
        else:
            self.lifespan = float('inf')
        self.animated = animated

    def get_center(self):
        return self.center

    def get_size(self):
        return self.size

    def get_radius(self):
        return self.radius

    def get_lifespan(self):
        return self.lifespan

    def get_animated(self):
        return self.animated

   
   
# debris images
debris_info = ImageInfo([320, 240], [640, 480])
debris_image = PhotoImage(r"C:\Users\Esther\Pictures\games\planet_asteroid.gif")

# nebula images
nebula_info = ImageInfo([400, 300], [800, 600])
nebula_image = PhotoImage(r"C:\Users\Esther\Pictures\games\veil_nebula.gif")

# splash image
#splash_info = ImageInfo([200, 150], [400, 300])
#splash_image = simplegui.load_image("http://commondatastorage.googleapis.com/codeskulptor-assets/lathrop/splash.png")

# ship image
ship_info = ImageInfo([45, 45], [90, 90], 35)
ship_image = PhotoImage(file =r"C:\Users\Esther\Pictures\games\Rockete.gif")
# missile image
missile_info = ImageInfo([5,5], [10, 10], 3, 50)
missile_image =PhotoImage(file =r"C:\Users\Esther\Pictures\games\aircraft-missile.gif")

# asteroid images
asteroid_info = ImageInfo([45, 45], [90, 90], 40)
asteroid_image = PhotoImage(r"C:\Users\Esther\Pictures\games\asteroidB.gif")

# animated explosion
explosion_info = ImageInfo([64, 64], [128, 128], 17, 24, True)
explosion_image = PhotoImage(file =r"C:\Users\Esther\Pictures\games\explosion1.gif")

#soundtrack =r"C:\Users\Esther\Documents\Downloads\woptheme.WAV"
#winsound.PlaySound(soundtrack,winsound.SND_NOSTOP)
missile_sound = r"C:\Users\Esther\Documents\Downloads\MISSILE.WAV"
#missile_sound.set_volume(.5)
ship_thrust_sound = r"C:\Users\Esther\Documents\Downloads\ARTIFACT.WAV"
explosion_sound = r"C:\Users\Esther\Documents\Downloads\HEADCRAS.WAV"
#explosion= winsound.PlaySound(explosion_sound,winsound.SND_NOSTOP)

# helper functions to handle transformations
def angle_to_vector(ang):
    return [math.cos(ang), math.sin(ang)]

def dist(p,q):
    return math.sqrt((p[0]-q[0])**2+(p[1]-q[1])**2)

# Ship class
class Ship:
    def __init__(self, pos, vel, angle, image, info):
        self.pos = [pos[0],pos[1]]
        self.vel = [vel[0],vel[1]]
        self.thrust = False
        self.angle = angle
        self.angle_vel = 0
        self.image = image
        self.image_center = info.get_center()
        self.image_size = info.get_size()
        self.radius = info.get_radius()
        self.forward = [0,0]
       
    def draw(self,canvas):
        #canvas.create_circle(self.pos, self.radius, 1, "White", "White")
        canvas.create_image(self.image, self.image_center, self.image_size, self.pos, self.image_size, self.angle)
        if self.thrust == True:
            canvas.create_image(self.image, [self.image_center[0] + 90, self.image_center[1]], self.image_size, self.pos, self.image_size, self.angle)
            label = Label(root, image= self.image)
            label.self.image = self.image
   
    def update(self):
        self.angle += self.angle_vel
        self.pos[0] += self.vel[0]
        self.pos[1] += self.vel[1]
        if self.pos[0] // 800 == 1:
            self.pos[0] = 0
        elif self.pos[0] // 800 < 0:
            self.pos[0] = 800
        if self.pos[1] // 600 == 1:
            self.pos[1] = 0
        elif self.pos[1] // 600 < 0:
            self.pos[1] = 600
        # the following two lines are to induce friction, which caps maximum velocity
        # and also causes ship to slowly stop by itself when thrusters are off
        self.vel[0] *= .99
        self.vel[1] *= .99
        if self.thrust == True:
            self.forward = angle_to_vector(self.angle)
            self.vel[0] += self.forward[0] * .12
            self.vel[1] += self.forward[1] * .12
       
    def keydown(self,key):
        ang_vel = .09
        if key == tkinter.KEY_MAP['left']:
            self.angle_vel = - ang_vel
        elif key == tkinter.KEY_MAP['right']:
            self.angle_vel = ang_vel
        elif key == tkinter.KEY_MAP['up']:
            self.thrust = True
            if self.thrust == True:
                sound = ship_thrust_sound
                winsound.PlaySound(ship_thrust_sound,winsound.SND_NOSTOP)
        elif key == tkinter.KEY_MAP['space']:
            self.shoot()
           
    def keyup(self,key):
        angle_vel = 0
        if key == tkinter.KEY_MAP['right']:
            my_ship.angle_vel = angle_vel
        elif key == tkinter.KEY_MAP['left']:
            my_ship.angle_vel = angle_vel
        elif key == tkinter.KEY_MAP['up']:
            self.thrust = False
            if self.thrust == False:
                self.forward = [0,0]
                sound = ship_thrust_sound
                sound.pause()
               
    def shoot(self):
        global a_missile
        vector = angle_to_vector(my_ship.angle)
        a_missile = Sprite([my_ship.pos[0] + (vector[0] * my_ship.radius),my_ship.pos[1] + (vector[1] * my_ship.radius)], [my_ship.vel[0] + (vector[0] * 5),my_ship.vel[1] + (vector[1] * 5)], 0, 0, missile_image, missile_info, missile_sound)
       
# Sprite class
class Sprite:
    def __init__(self, pos, vel, ang, ang_vel, image, info, sound = None):
        self.pos = [pos[0],pos[1]]
        self.vel = [vel[0],vel[1]]
        self.angle = ang
        self.angle_vel = ang_vel
        self.image = image
        self.image_center = info.get_center()
        self.image_size = info.get_size()
        self.radius = info.get_radius()
        self.lifespan = info.get_lifespan()
        self.animated = info.get_animated()
        self.age = 0
        #if sound:
            #sound.rewind()
            #sound.play()
   
    def draw(self, canvas):
        canvas.create_image(self.image, self.image_center, self.image_size, self.pos, self.image_size, self.angle)
        label = Label(root, image= self.image)
        label.self.image = image
       
    def update(self):
        self.pos[0] += self.vel[0]
        self.pos[1] += self.vel[1]
        self.angle += self.angle_vel
           
def draw(canvas):
    global time
   
    # animate background
    time += 1
    center = debris_info.get_center()
    size = debris_info.get_size()
    wtime = (time / 8) % center[0]
    canvas.create_image([width/2, height/2],nebula_image, nebula_info.get_center(), nebula_info.get_size())
    canvas.create_image(debris_image, [center[0]-wtime, center[1]], [size[0]-2*wtime, size[1]],
                                [width/2+1.25*wtime, height/2], [width-2.5*wtime, height])
    canvas.create_image(debris_image, [size[0]-wtime, center[1]], [2*wtime, size[1]],
                                [1.25*wtime, height/2], [2.5*wtime, height])
   
    canvas.create_text(25, 50, font = 36, fill ="Red", text = "HestyLuv")

    # draw ship and sprites
    my_ship.draw(canvas)
    a_rock.draw(canvas)
    a_missile.draw(canvas)
   
    # update ship and sprites
    my_ship.update()
    a_rock.update()
    a_missile.update()
   
# timer handler that spawns a rock   
def rock_spawner():
    global a_rock
    a_rock = Sprite([width * random.random(), height * random.random()], [random.random() * 3 - 1.5,random.random() * 3 - 1.5], 0, (random.random() - .5) / 8, asteroid_image, asteroid_info)
   
def key_down(key):
    my_ship.keydown(key)
   
def key_up(key):
    my_ship.keyup(key)
   
# initialize frame
root.title('My spaceship game')
#frame = Frame(root)


# initialize ship and two sprites

my_ship = Ship([width / 2, height / 2], [0, 0], 1.5 * math.pi, ship_image, ship_info)
a_rock = Sprite([width * random.random(), height * random.random()], [random.random() * 3 - 1.5,random.random() * 3 - 1.5], 0, (random.random() - .5) / 8, asteroid_image, asteroid_info)
a_missile = Sprite([2 * width / 3, 2 * height / 3], [-1,1], 0, 0, missile_image, missile_info, winsound.PlaySound(missile_sound,winsound.SND_NOSTOP))

# register handler
#root.bind("<Button-1>", draw)
#root.bind("<KeyPress-Down>", key_down)
#root.bind("<KeyPress-Up>", key_up)
#frame.set_draw_handler(draw)
#frame.set_keydown_handler(key_down)
#frame.set_keyup_handler(key_up)

#timer = tkinter.create_timer(1000.0, rock_spawner)

# get things rolling
#timer.pack()

canvas.pack(fill=BOTH)
#frame.pack()
root.mainloop()
Esther
 
Posts: 9
Joined: Tue Mar 12, 2013 5:38 pm

Re: Game using python version 3

Postby StormJedi » Wed Mar 13, 2013 1:08 am

Is that an animated gif? Because I think Tkinter doesn't support animated gifs.
Python 2.7
Python 3.3
Windows 7 x64
Ubuntu 12.10 x64
One day I hope to use one OS and 1 Python flavor, until that day, life goes on.
StormJedi
 
Posts: 27
Joined: Fri Feb 22, 2013 3:36 pm

Re: Game using python version 3

Postby Esther » Wed Mar 13, 2013 3:27 pm

ok,but what is the way forward plzzz everyone
Esther
 
Posts: 9
Joined: Tue Mar 12, 2013 5:38 pm

Re: Game using python version 3

Postby Mekire » Thu Mar 14, 2013 12:59 am

Well personally if you really want to make a game in python I would suggest trying to use Pygame rather than Tkinter (I am admittedly a bit biased). There are a couple examples in the Game Development section of this forum. Generally when you animate things on screen you are literally telling the program to change image every giving time period, not just trying to show an animated gif. My only advice to you at this point is start small.

Also a few other notes: start using os.path.join for your paths rather than what you are doing. There are also far too many global variables in your code (if you do intend them to be constant do yourself and everyone else a favor by putting them in all CAPS. Also I don't quite see why you think you need the getter functions in your first class.

-Mek
User avatar
Mekire
 
Posts: 987
Joined: Thu Feb 07, 2013 11:33 pm
Location: Amakusa, Japan

Re: Game using python version 3

Postby jang » Sun Jun 02, 2013 2:51 pm

Esther, I appreciate your initial attempt to post a small amount of code. Any chance you could delete or edit your second code dump? "An Introduction to Interactive Programming in Python" is still running ("Spaceship" this week, "Rice Rocks" the next) and the course will probably be repeated in the future.

Cheers,
jan
jang
 
Posts: 1
Joined: Sun Jun 02, 2013 2:46 pm


Return to General Discussions

Who is online

Users browsing this forum: ryguy7272 and 3 guests