KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: LUA - hilfe beim coden benötigt
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
hey liebes Forum,
da ich immerwieder probleme beim coden hab und auch hilfe brauche schreibe ich immerwieder hier rein also bitte nicht closen Admins Smile

mein problem ist folgendes:
wenn ich X drücke wird nur beipunch = 1 ausgeführt. beipunch = 2 wird nicht ausgeführt und deshalb meine frage was ist das problem, was muss geändert werden.

Zitat:
math.randomseed(os.time())
beipunch = math.random(1,2)
.
.
.
if pad:cross() and oldpad:cross() ~= pad:cross() and beipunch == 1 then
HP2 = HP2 + schlag
elseif pad:cross() and beipunch == 1 then
player2 = defend2
else player2 = normal2
end

if pad:cross() and oldpad:cross() ~= pad:cross() and beipunch == 2 then
Player2[1].x = Player2[1].x + 40
player2 = backward2
end


liebe Grüße SIM sk

SIM sk :
hey liebes Forum,
da ich immerwieder probleme beim coden hab und auch hilfe brauche schreibe ich immerwieder hier rein also bitte nicht closen Admins Smile

mein problem ist folgendes:
wenn ich X drücke wird nur beipunch = 1 ausgeführt. beipunch = 2 wird nicht ausgeführt und deshalb meine frage was ist das problem, was muss geändert werden.

[quote]
math.randomseed(os.time())
beipunch = math.random(1,2)
.
.
.
if pad:cross() and oldpad:cross() ~= pad:cross() and beipunch == 1
end

if pad:cross() and oldpad:cross() ~= pad:cross() and beipunch == 2

Wie soll der das unterscheiden?

du musst deine frage schon deutlicher stellen ich habe ya auch nicht nur geschrieben, dass ich nen problem habe ^^
Klar, dass es nicht ausgeführt wird. Ich habe mich nie mit Lua auseinandergesetzt, aber bei end wird das Programm logischerweise beendet. Das Programm läuft so:

Code:
math.randomseed(os.time())
beipunch = math.random(1,2)
if pad:cross() and oldpad:cross() ~= pad:cross() and beipunch == 1 then
HP2 = HP2 + schlag
elseif pad:cross() and beipunch == 1 then
player2 = defend2
else player2 = normal2
end

Oder anders ... er hat nicht mal die Möglichkeit, zum 2. Teil zu springen, daher wird dieser nicht ausgeführt.

*ok, stimmt nicht ganz, siehe Post darunter. Lua ist eben doch eine Fremdsprache*

fkrone :
Klar, dass es nicht ausgeführt wird. Ich habe mich nie mit Lua auseinandergesetzt, aber bei end wird das Programm logischerweise beendet. Das Programm läuft so:

Code:
math.randomseed(os.time())
beipunch = math.random(1,2)
if pad:cross() and oldpad:cross() ~= pad:cross() and beipunch == 1 then
HP2 = HP2 + schlag
elseif pad:cross() and beipunch == 1 then
player2 = defend2
else player2 = normal2
end

Oder anders ... er hat nicht mal die Möglichkeit, zum 2. Teil zu springen, daher wird dieser nicht ausgeführt.


in lua wird da durch nur die iF-Clause beendet, das heißt dannach ladet der einfach weiter ...

also weiß einer vllt wies sein müsste?
push
Du setzt beipunch nirgends auf 2, machts jetzt klick?

Sparky :
Du setzt beipunch nirgends auf 2, machts jetzt klick?


hab ich doch:

Zitat:
if pad:cross() and oldpad:cross() ~= pad:cross() and beipunch == 2 then
Player2[1].x = Player2[1].x + 40
player2 = backward2
end

SIM sk :
hab ich doch

Eben nicht!

Ich hab keine ahnung von LUA.. aber ich sags jetzt mal so.. der fehler liegt in der reinen Logik in math.random..

Code:
beipunch = math.random(1,2)


auf deutsch er erzeugt Zwischen der zahl 1 und 2 ein random.. -> es is immer 1..

Hier ein C code um zu verstehen:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(int argc, char *argv[])
{
    srand(time(0));
    
    int rnum, i;
    
    for(i=0;i<0x20;i++)
    {
        rnum = rand() % 2;
        printf("Random Number: %i\n", rnum);
    }
    
    return 0;
}


Der code macht nichts anderes.. Das Resultat ist das hier:

Zitat:
Random Number: 1
Random Number: 1
Random Number: 1
Random Number: 1
Random Number: 0
Random Number: 0
Random Number: 0
Random Number: 1
Random Number: 1
Random Number: 1
Random Number: 0
Random Number: 0
Random Number: 1
Random Number: 0
Random Number: 0
Random Number: 1
Random Number: 1
Random Number: 0
Random Number: 0
Random Number: 1
Random Number: 1
Random Number: 1
Random Number: 1
Random Number: 0
Random Number: 0
Random Number: 0
Random Number: 1
Random Number: 1
Random Number: 1
Random Number: 0
Random Number: 0
Random Number: 1


Mach mal aus der zahl 2 eine 3.. dann wird es höchstwarscheinlich funktionieren..

EDIT:

http://lua-users.org/wiki/MathLibraryTutorial :
  • math.random() generates pseudo-random numbers uniformly distributed. Supplying argument alters its behaviour:
  • math.random() with no arguments generates a real number between 0 and 1.
  • math.random(upper) generates integer numbers between 1 and upper.
  • math.random(lower, upper) generates integer numbers between lower and upper.

> = math.random()
0.0012512588885159
> = math.random()
0.56358531449324

> = math.random(100)
20
> = math.random(100)
81
> = math.random(70,80)
76
> = math.random(70,80)
75

upper and lower must be integer. In other case Lua casts upper into an integer, sometimes giving math.floor(upper) and others math.ceil(upper), with unexpected results (the same for lower).


Ok hatte doch recht ;P

hab aus der 2 eine 3 gemacht ging trotzdem nicht ...?

SIM sk :
hab aus der 2 eine 3 gemacht ging trotzdem nicht ...?


Ja weil du ganze Zahlen ausgeben musst!

Code:
> = math.random()
0.0012512588885159
> = math.random()
0.56358531449324


Sieht man doch das da keine ganzen Zahlen ausgegeben werden..
Und so wirds auch bei dir sein!
>.>

und wie kann ich das ändern?
Das Problem ist, dass du von Anfang an einen großen code hast. Am besten baust du dir den code stück für stück zusammen und testest die kleinen neuerungen.
Du solltest zuerst mal gucken welchen wert beipunsch nun wirklich hat. Hab den Code kurz zusammengeschmirt und könnte fehler enthalten

Code:
red=Color.new(255,0.0)
function neu()
beipunsch = math.random()
end
math.randomseed(os.time())
beipunsch = math.random()
while true do
if Controls.read():cross() and oldpad ~= Controls.read() then neu() end
oldpad=pad
screen:clear()
screen:print(0,0,"Beipunsch: " ..beipunsch,red)
screen.flip()
if Controls.read():start() then break end
end

vielen dank das probiere mal wenn ich zeit habe ^^

EDIT: der code hilft nicht, da ich ya will, dass wenn 1 ist ... geschehen soll und wenn 2 ist ,,, geschehen soll!
Seiten: 1 2
Referenz-URLs