Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  7 862
Hei freaks

Jeg holder på å lage ett lite spill, litt prøving.

Men jeg får en error som er slik:

Kode

There's an error in your program:
*** can't assign to literal (ball2.py,line 64)
jeg finner ikke ut av feilen, men jeg tror at 'c_x' og 'c_y' ikke er "kobla" til ball.

kan dere hjelpe meg?

her er koden

Kode

from pygame import *
import random

ballpic = image.load('ball.png')
ballpic.set_colorkey((0,0,0))

fistpic = image.load ('fist.png')
fistpic.set_colorkey ((0,0,0))

c_x = 400
c_y = 400

numfists = 15
delay = 10

done = False

fists = []
fist = []

for count in range(numfists):
	fist.append(dict)
	fists[count] = {'x': 0, 'y': 0, 'e_x': random.randint(1, 2), 'e_y': random.randint(1, 2)}

init()
screen = display.set_mode((640, 480))
key.set_repeat(1, 1)
display.set_caption('Ball game')
event.set_grab(1)

while done == False:
	screen.fill(0)

	for count in range(numfists):
		screen.blit(fistpic, (fists[count]['x'], fists[count]['y']))

	screen.blit(ballpic, (ball['c_x'],ball['c_y']))

	display.update()

	time.delay(delay)
	

	for count in range(numballs):
		balls[count]['x'] = balls[count]['x'] + balls[count]['e_x']
		balls[count]['y'] = balls[count]['y'] + balls[count]['e_y']

	for count in range(numballs):
		if balls[count]['x'] > 620:
			balls[count]['e_x'] = random.randint(-3, 0)
		if balls[count]['x'] < -10:
			balls[count]['e_x'] = random.randint(0, 3)
		if balls[count]['y'] > 470:
			balls[count]['e_y'] = random.randint(-3, 0)
		if balls[count]['y'] < -10:
			balls[count]['e_y'] = random.randint(0, 3)

	for e in event.get():
		if e.type == KEYUP:
			if e.key == K_ESCAPE:
				done = True
				
	if pressed_keys[K_LEFT]:
                'c_x' = 'c_x' + 1

        if pressed_keys[K_RIGHT]:
                'c_x' = 'c_x' - 1
        
        if pressed_keys[K_UP]:
                'c_y' = 'c_y' + 1

        if pressed_keys[K_DOWN]:
                'c_y' = 'c_y' - 1

	def Intersect(c_x, c_y, e_x, e_y):
                if (c_x > e_x - 32) and (c_x < e_x + 32) and (c_y > e_y - 32) and (c_y < e_y + 32):
                        done = 1
                else:
                        done = 0

print "You lasted for", time.get_ticks()/1000, "seconds!"
'c_y' = 'c_y' + 1 byttes til c_y = c_y + 1 (eller c_y+=1).

c_y er en variabel og ikke en string. Samme gjelder c_x.
Sist endret av dexter; 1. juni 2010 kl. 11:35.
Bustern's Avatar
Trådstarter
så altså må jeg fjerne noen '' eller... er litt noob...

så ikke at du skrev det... ok den er grei tusen takk

nå kom det en ny feil... litt større feilmelding nå....

Kode

error: inconsistent indentiation detection!

1) Your intentation is outright inncorrect (easy to fix), OR

2) Your intendation mixes tabs and spaces.

To fix case 2, change all tabs to spaces by using Edit ->Select All followed by format->Untablify rergion and specify the number of columns usede by each tab.
for å være ærlig forsto jeg ingenting av det her... prøvde den metoden, men vet ikke helt hva jeg skal velge...
Sitat av Bustern Vis innlegg
så altså må jeg fjerne noen '' eller... er litt noob...

så ikke at du skrev det... ok den er grei tusen takk

nå kom det en ny feil... litt større feilmelding nå....

Kode

error: inconsistent indentiation detection!

1) Your intentation is outright inncorrect (easy to fix), OR

2) Your intendation mixes tabs and spaces.

To fix case 2, change all tabs to spaces by using Edit ->Select All followed by format->Untablify rergion and specify the number of columns usede by each tab.
for å være ærlig forsto jeg ingenting av det her... prøvde den metoden, men vet ikke helt hva jeg skal velge...
Vis hele sitatet...
Det står til og med i klart engelsk. Du har enten brukt mellomrom, eller tabulator feil. Ellers har du blandet disse.
Jeg synes du skal lese litt mer, og prøve å forstå feilmeldingene dine, samt. google dem. Det vil gå MYE raskere.

Start her: http://wiki.python.org/moin/HowToEditPythonCode
Bustern's Avatar
Trådstarter
Ja. enig i det du sier og jeg inrømmer at jeg er innmari nybegyner... men jeg fant feilen, og det var ett par tabs og spaces som var synderen.
Tjaa du har greid og lage veldig mange feil i den koden.

Du har stort sett brukt "string" der det skulle vært variabel.
Noen skrivefeil.
Det er variabler som aldrig blir definert før for loopen.

Kode

for count in range(numballs):
		balls[count]['x'] = balls[count]['x'] + balls[count]['e_x']
		balls[count]['y'] = balls[count]['y'] + balls[count]['e_y']
Her må du først definere variabler for numballs og balls.
Bare et eksempel hvordan denne loopen ikke kan fungere.

Kode

>>> #Denne loopen har samme utgangpunkt som den i koden din.
>>> for count in range(numballs):
	balls = balls + 1
	print balls	

Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    for count in range(numballs):
NameError: name 'numballs' is not defined

>>> numballs = 3
>>> for count in range(numballs):
	balls = balls + 1
	print balls	

Traceback (most recent call last):
  File "<pyshell#25>", line 2, in <module>
    balls = balls + 1
NameError: name 'balls' is not defined

>>> balls = 0
>>> for count in range(numballs):
	balls = balls + 1
	print balls
	
1
2
3
>>> #Da virker det som du ser må variabler defineres før loopen
Det og sette variabel sånn at denne linjen skal virke er nok ikke så lett og forstå.
balls gjør 2 index call,defor må variablen være "List of Lists".

Kode

balls[count]['x'] = balls[count]['x'] + balls[count]['e_x']
balls gjør 2 index call,defor må variablen være "List of Lists".

Kode

>>> balls = [[1,2],[3,4]]
>>> balls
[[1, 2], [3, 4]]
>>> balls[1][1] = 9 #Denne gjør da index kall på liste 2 første element
>>> balls
[[1, 2], [3, 9]]
>>> #som da er tallet 4 vi teller fra 0
Denne funksjon vil aldrig virke,du kaller den ikke.

Kode

def Intersect(c_x, c_y, e_x, e_y):
                if (c_x > e_x - 32) and (c_x < e_x + 32) and (c_y > e_y - 32) and (c_y < e_y + 32):
                        done = 1
                else:
                        done = 0
Funksjoner må kalles ellers forblir koden lokal i funksjonen.
my_func = Intersect(c_x, c_y, e_x, e_y)

Du bør lære deg mere basic python,det går og starte rett på pygame.
Som du ser gjør du veldig mange grunnleggende feil.
Mange av disse kunne vært unngått med bedere forstålse av python.
Har du ikke programmert før må du bruke mye tid på det grunnleggende,kommer man fra andre språk går dette lettere.
Sist endret av snippsat; 1. juni 2010 kl. 23:24.
Bustern's Avatar
Trådstarter
Takk for bra svar

Saken er at jeg begynte med å forandre på en kode fra ett annet spill. Jeg kan det basic python, men er litt lenge siden jeg koda sist, og jeg tenkte når jeg forandra koden fra ett annet spill, ville det bli lettere å komme inn i mønsteret igjen.
jeg kan det basic python,
Vis hele sitatet...
Det er nå dine ord,viss du ærlig med deg selv så tror jeg nok du kunne ha gått grundigere inn i mange deler av språket.

Saken er at jeg begynte med å forandre på en kode fra ett annet spill
Vis hele sitatet...
Ja jeg regnet med det for koden din var veldig langt fra og fungere.

Start med noe som fungerer,legg inn 1 og 1 funksjon test og test igjen.
Når alt fungerer legg inn mere,gå sakte frem.
Da er der mye lettere og feilsøke/debugge,sånn som koden din er nå er det mange feil over hele koden.
Sist endret av snippsat; 3. juni 2010 kl. 16:47.