Permalänk

Spel i java - hjälp mig!

Tjo,

Håller på att göra ett litet spel i java. Det är ett 2D spel där man springer runt på plattformar och hoppar om kring. Men mitt "problem" är att jag inte vet hur jag ska göra banorna. Jag kan ju inte hålla på att göra 1000 olika "g.draw..." till varje bana, det tar ju jätte länge, samt att det bara blir klumpigt och... nae.

Jag tänkte om någon av er hade nån bra idé som ni har hört/gjort/kommer på. Jag är inget pro på att programmera heller så inget för avancerat (men jag kan ju alltid lära mig ).

Tack på förhand.

Mvh
Alexandberg

Visa signatur

Stationär: [Intel i5 750 2,66Ghz]-[XFX Radeon HD5770 1GB DDR5]-[ASRock P55 Extreme]-[Corsair 2x2GB DDR3]-[WD Black 640GB]-[Corsair TX 650W]
Bärbar:  MacBook Pro 13" 2011 - Unboxing - Galleri
TV-spel: Playstation 3 40GB, Xbox 360 Elite, Wii, Gamecube, N64, NES

Permalänk
Medlem

Använd maps och gör en map-fil med tecken som representerar olika objekt.

Tex:

Tomrum: #
Sten: @
Powerup: +
Start: x

och sedan textar du ut en map

######+################
######@################
#####@@###+###########
###@@@@@@@@@########
###@@@@@@@@@@######x
@@@@@@@@@@@@@@@@@@@

Läs mer här:
http://developers.sun.com/mobility/midp/articles/game/

Du vill nog även kolla in Slick2d om du inte ska skriva all fysik från grunden.

http://slick.cokeandcode.com/

Visa signatur

Hackintosh?
Mac OSX Tweaks/Hacks?

--> Besök nya [B]groths.org[/B]

Permalänk
Skrivet av Cindori:

Använd maps och gör en map-fil med tecken som representerar olika objekt.

Tex:

Tomrum: #
Sten: @
Powerup: +
Start: x

och sedan textar du ut en map

######+################
######@################
#####@@###+###########
###@@@@@@@@@########
###@@@@@@@@@@######x
@@@@@@@@@@@@@@@@@@@

Läs mer här:
http://developers.sun.com/mobility/midp/articles/game/

Tack så jätte mycket! Det måste jag testa

Citat:

Du vill nog även kolla in Slick2d om du inte ska skriva all fysik från grunden.

http://slick.cokeandcode.com/

Det är ett projekt till skolan, så jag får bara använda mig av java Men tack ändå.

Edit: Går det på något sätt att göra ett sånt här cell system själv utan att behöva använda sig av Java ME? Det verkar ju vara för mobiler och andra grejer

Visa signatur

Stationär: [Intel i5 750 2,66Ghz]-[XFX Radeon HD5770 1GB DDR5]-[ASRock P55 Extreme]-[Corsair 2x2GB DDR3]-[WD Black 640GB]-[Corsair TX 650W]
Bärbar:  MacBook Pro 13" 2011 - Unboxing - Galleri
TV-spel: Playstation 3 40GB, Xbox 360 Elite, Wii, Gamecube, N64, NES

Permalänk

Skulle det funka bra med arrayer?

array1 ##########
array2 ##########
array3 ##@@@####
array4 #@@@@@###
osv....

Varje "cell" är en bild som är 10x10px som ritas ut efter varann. Sen ska man kunna välja vad bilden är för något, t ex. som ovan, tomrum, sten, powerup osv...

Visa signatur

Stationär: [Intel i5 750 2,66Ghz]-[XFX Radeon HD5770 1GB DDR5]-[ASRock P55 Extreme]-[Corsair 2x2GB DDR3]-[WD Black 640GB]-[Corsair TX 650W]
Bärbar:  MacBook Pro 13" 2011 - Unboxing - Galleri
TV-spel: Playstation 3 40GB, Xbox 360 Elite, Wii, Gamecube, N64, NES

Permalänk
Medlem

Implementera en "Tile engine" och använd sen en tile editor för att skapa banorna.
http://en.wikipedia.org/wiki/Tile_engine

Finns färdiga tile editors, som t.ex. http://www.mapeditor.org/

Visa signatur

Intel Core i7-3770K | NVIDIA Geforce GTX 980 | 16 GB DDR3 | DELL P2415Q | DELL U2711 | DELL U2410

Permalänk
Medlem
Skrivet av Alexandberg:

Skulle det funka bra med arrayer?

array1 ##########
array2 ##########
array3 ##@@@####
array4 #@@@@@###
osv....

Varje "cell" är en bild som är 10x10px som ritas ut efter varann. Sen ska man kunna välja vad bilden är för något, t ex. som ovan, tomrum, sten, powerup osv...

Detta verkar väldigt oeffektivt, du skulle väll ha spelet grafiskt?
Det räcker med att du lagrar position samt ett id som beskriver typen på objektet, tex G för ground:

char id
int x_position, y_position

Detta kan du läsa in tex från en fil till en lista som håller dessa objekt, denna lista loopar du igenom för varje uppdatering med exempelvis for, while eller liknande och ritar grundblocket på x_position, y_position, om det är av typ G så ritar du grundblock, om något annat så ritar du det ist. Ska du ha kollision på blocken kan du behöva fler variabler i objektet.

Permalänk
Skrivet av Dalton Sleeper:

Detta verkar väldigt oeffektivt, du skulle väll ha spelet grafiskt?
Det räcker med att du lagrar position samt ett id som beskriver typen på objektet, tex G för ground:

char id
int x_position, y_position

Detta kan du läsa in tex från en fil till en lista som håller dessa objekt, denna lista loopar du igenom för varje uppdatering med exempelvis for, while eller liknande och ritar grundblocket på x_position, y_position, om det är av typ G så ritar du grundblock, om något annat så ritar du det ist. Ska du ha kollision på blocken kan du behöva fler variabler i objektet.

Jag förstår inte riktigt. Hur ska man lagra alla x och y positioner? Det blir väl lite jobbigt om man ska behöva skriva ut dom själv.

Visa signatur

Stationär: [Intel i5 750 2,66Ghz]-[XFX Radeon HD5770 1GB DDR5]-[ASRock P55 Extreme]-[Corsair 2x2GB DDR3]-[WD Black 640GB]-[Corsair TX 650W]
Bärbar:  MacBook Pro 13" 2011 - Unboxing - Galleri
TV-spel: Playstation 3 40GB, Xbox 360 Elite, Wii, Gamecube, N64, NES

Permalänk
Hedersmedlem

gör en map editor, det var några som gjorde i sina projekt när vi hade kurs i java. Det kan jag tänka mig inte är så jättesvårt. Du har ritat ut dina olika objekt i rutan som man kan använda, sen får man klicka på dom och sen välja en plats där objektet ska placeras, gärna kunna flytta det efteråt också. Sen sparas allt till en fil.

Permalänk
Skrivet av Shimonu:

gör en map editor, det var några som gjorde i sina projekt när vi hade kurs i java. Det kan jag tänka mig inte är så jättesvårt. Du har ritat ut dina olika objekt i rutan som man kan använda, sen får man klicka på dom och sen välja en plats där objektet ska placeras, gärna kunna flytta det efteråt också. Sen sparas allt till en fil.

Det funderade jag faktiskt på. Men problemet är att jag inte vet hur jag ska rita ut allt på banan. Ska jag använda mig av arrayer som jag förklarade där varje rad är en array, eller på något annat sätt?

T ex. så här:

Image [] row1 = new Image[] {a, a, a, a, a, a, a, a, a, a}; Image [] row2 = new Image[] {a, a, a, a, r, a, a, a, a, r}; Image [] row3 = new Image[] {a, a, a, r, r, r, a, r, r, r}; Image [] row4 = new Image[] {a, r, r, r, r, r, r, r, r, r}; Image [] row5 = new Image[] {r, r, r, r, r, r, r, r, r, r};

a = air
r = rock

Varje bild är 10x10

Då blir det alltså en 100x50 bana i det här fallet.

Visa signatur

Stationär: [Intel i5 750 2,66Ghz]-[XFX Radeon HD5770 1GB DDR5]-[ASRock P55 Extreme]-[Corsair 2x2GB DDR3]-[WD Black 640GB]-[Corsair TX 650W]
Bärbar:  MacBook Pro 13" 2011 - Unboxing - Galleri
TV-spel: Playstation 3 40GB, Xbox 360 Elite, Wii, Gamecube, N64, NES

Permalänk
Medlem
Skrivet av Alexandberg:

Jag förstår inte riktigt. Hur ska man lagra alla x och y positioner? Det blir väl lite jobbigt om man ska behöva skriva ut dom själv.

Du har ju angett i posten nedan alla a och r, så varför inte som positioner på skärmen, eller kanske ett rutnät på skärmen, tex (1, 10) som betyder raden längst ner tionde till höger? du lägger allt i en lista, det ritas ut mha två kodrader, en for-loop samt samt dittObjekt.draw() som har positioner i sig. Förslag på objekt som håller sin egen bild är då:

bitmap b; int x, y;

eller om man vill ha bitmappar separat:

char type int x, y;

så ritar man ut med en for-loop samt:

if (mittobjekt.type == 'G') draw(ground_block, mittObjekt.x(), mittObjekt.y()) else if(...)

notera att detta inte är direkt fungerande javakod, bara som en fingervisning...

Skrivet av Alexandberg:

Det funderade jag faktiskt på. Men problemet är att jag inte vet hur jag ska rita ut allt på banan. Ska jag använda mig av arrayer som jag förklarade där varje rad är en array, eller på något annat sätt?

T ex. så här:

Image [] row1 = new Image[] {a, a, a, a, a, a, a, a, a, a}; Image [] row2 = new Image[] {a, a, a, a, r, a, a, a, a, r}; Image [] row3 = new Image[] {a, a, a, r, r, r, a, r, r, r}; Image [] row4 = new Image[] {a, r, r, r, r, r, r, r, r, r}; Image [] row5 = new Image[] {r, r, r, r, r, r, r, r, r, r};

a = air
r = rock

Varje bild är 10x10

Då blir det alltså en 100x50 bana i det här fallet.

Om vi tänker oss att du gör på detta sätt, hur hade du tänkt att hantera kollision, för jag antar du ska ha nån gubbe som springer runt? att ha allt i en lista underlättar också detta, samt inläsning från ev fil eller liknande om man vill det. är det ett spel sett uppifrån eller från sidan, som typ super mario på nes?

Permalänk
Skrivet av Dalton Sleeper:

Du har ju angett i posten nedan alla a och r, så varför inte som positioner på skärmen, eller kanske ett rutnät på skärmen, tex (1, 10) som betyder raden längst ner tionde till höger? du lägger allt i en lista, det ritas ut mha två kodrader, en for-loop samt samt dittObjekt.draw() som har positioner i sig.

Det var ett rutnät jag hade tänkt med mina arrayer som jag visade.
Du får gärna förklara lite mer om listan.

Citat:

Förslag på objekt som håller sin egen bild är då:

bitmap b; int x, y;

eller om man vill ha bitmappar separat:

char type int x, y;

så ritar man ut med en for-loop samt:

if (mittobjekt.type == 'G') draw(ground_block, mittObjekt.x(), mittObjekt.y()) else if(...)

notera att detta inte är direkt fungerande javakod, bara som en fingervisning...

Kan jag inte göra på samma sätt då fast med mina arrayer?

Citat:

Om vi tänker oss att du gör på detta sätt, hur hade du tänkt att hantera kollision, för jag antar du ska ha nån gubbe som springer runt? att ha allt i en lista underlättar också detta, samt inläsning från ev fil eller liknande om man vill det. är det ett spel sett uppifrån eller från sidan, som typ super mario på nes?

Jag hade tänkt att hantera kollisionerna med intersect och rektanglar (det enda jag har lärt mig), sen vet jag inget mer just nu.

Läsa in banor från en fil är en sak jag har tänkt ha om det bara nu inte blir för svårt, men det tror jag inte.

Man ser från sidan, precis som mario på nes.

Visa signatur

Stationär: [Intel i5 750 2,66Ghz]-[XFX Radeon HD5770 1GB DDR5]-[ASRock P55 Extreme]-[Corsair 2x2GB DDR3]-[WD Black 640GB]-[Corsair TX 650W]
Bärbar:  MacBook Pro 13" 2011 - Unboxing - Galleri
TV-spel: Playstation 3 40GB, Xbox 360 Elite, Wii, Gamecube, N64, NES

Permalänk
Medlem

Du kan det här med klasser och så vidare? Isåfall är det bara att spara objekten i lämplig förvarare i banan.

Här är kod från ett gammalt spel jag gjorde i java

activeobj och staticobj är listor med objekt

public void Draw_gamestate(Graphics2D g,int offsetx,int offsety,int layer){ if(layer == 0){ g.drawImage(this.Get_background(), offsetx, offsety, null, null); } for (int i=0;i<activeobj.size();i++){ if(activeobj.get(i).getLayer() == layer){ activeobj.get(i).Draw_object(g,offsetx,offsety); } } for (int i=0;i<staticobj.size();i++){ if(staticobj.get(i).getLayer() == layer){ staticobj.get(i).Draw_object(g,offsetx,offsety); } } }

Permalänk

Tog en liten paus med kodandet, men nu är jag igång igen.

just nu ser det ut såhär i map klassen:

import javax.swing.*; import java.applet.*; import java.awt.*; import java.awt.event.*; public class map{ Image row1[]; Image row2[]; Image row3[]; Image row4[]; Image row5[]; public map(Image a, Image r){ row1 = new Image[] {a, a, a, a, a, a, a, a, a, a}; row2 = new Image[] {a ,a, a, a, a, a, a, a, r, a}; row3 = new Image[] {a, a, a, a, a, r, a, r, r, r}; row4 = new Image[] {a, a, a, a, r, r, r, r, r, r}; row5 = new Image[] {r, r, r, r, r, r, r, r, r, r}; } }

Jag har fått den att rita ut bilder (a eller r) där man har placerat dem i arrayen, men problemet nu är att efter som jag bara har bilder kan jag inte fixa kollisioner.

Det jag hade tänkt mig är att fixa så att "a = air.getImage()" och "r = rock.getImage()". Men jag är lite osäker på hur det ska funka. Min lärare visade mig nåt där jag gjorde en ny klass "block", och sen fick arrayerna vara block[]... Men jag fattade inte så mycket av det, samt att filerna försvann så jag kan inte gå tillbaks och kolla.

Sen vet jag inte hur jag ska få ut x och y från varje "r". Jag behöver dem till kollisionerna.

Jag ska försöka lite själv men jag skriver det här nu så uppdaterar jag om jag kommer vidare någonstans.

Skrivet av hawy:

Du kan det här med klasser och så vidare? Isåfall är det bara att spara objekten i lämplig förvarare i banan.

Här är kod från ett gammalt spel jag gjorde i java

activeobj och staticobj är listor med objekt

public void Draw_gamestate(Graphics2D g,int offsetx,int offsety,int layer){ if(layer == 0){ g.drawImage(this.Get_background(), offsetx, offsety, null, null); } for (int i=0;i<activeobj.size();i++){ if(activeobj.get(i).getLayer() == layer){ activeobj.get(i).Draw_object(g,offsetx,offsety); } } for (int i=0;i<staticobj.size();i++){ if(staticobj.get(i).getLayer() == layer){ staticobj.get(i).Draw_object(g,offsetx,offsety); } } }

Jag förstod inte så mycket av det där Egentligen ska vi börja med klasser i C kursen, men jag har börjat lite tidigare (B kursen nu). Men vad menar du med "activeobj och staticobj är listor med objekt".

Tack

Edit:

Tror jag löste ena problemet.

import javax.swing.*; import java.applet.*; import java.awt.*; import java.awt.event.*; public class map{ Image row1[]; Image row2[]; Image row3[]; Image row4[]; Image row5[]; Image a, r; air air; rock rock; public map(Image airImg, Image rockImg){ air = new air(); rock = new rock(); a = air.getImage(airImg); r = air.getImage(rockImg); row1 = new Image[] {a, a, a, a, a, a, a, a, a, a}; row2 = new Image[] {a ,a, a, a, a, a, a, a, r, a}; row3 = new Image[] {a, a, a, a, a, r, a, r, r, r}; row4 = new Image[] {a, a, a, a, r, r, r, r, r, r}; row5 = new Image[] {r, r, r, r, r, r, r, r, r, r}; }

Nu tar den bilden från air och rock klasserna och lägger in i arrayen. Men jag behöver fortfarande få ut x och y värdena för varje objekt.

Visa signatur

Stationär: [Intel i5 750 2,66Ghz]-[XFX Radeon HD5770 1GB DDR5]-[ASRock P55 Extreme]-[Corsair 2x2GB DDR3]-[WD Black 640GB]-[Corsair TX 650W]
Bärbar:  MacBook Pro 13" 2011 - Unboxing - Galleri
TV-spel: Playstation 3 40GB, Xbox 360 Elite, Wii, Gamecube, N64, NES

Permalänk
Medlem

listor med objekt är vad vi pratat om hela tiden, vi trodde bara du hade en aning om det
objekten som jag inte ser du har, kanske kan börja med:

public class block{ private Image b_image; private int b_x, b_y; public int getX(); public int getY(); ... }

sedan skapar du dessa och pular in i en array, lista eller whatever.

Permalänk
Skrivet av Dalton Sleeper:

listor med objekt är vad vi pratat om hela tiden, vi trodde bara du hade en aning om det
objekten som jag inte ser du har, kanske kan börja med:

public class block{ private Image b_image; private int b_x, b_y; public int getX(); public int getY(); ... }

sedan skapar du dessa och pular in i en array, lista eller whatever.

Men hur ska jag rita ut blocken på banan sen då?'

Så här har jag nu:

for(int i=0;i<10;i++){ g.drawImage(map.row1[i], 0+100*i, 0, this); } for(int i=0;i<10;i++){ g.drawImage(map.row2[i], 0+100*i, 0+100, this); } for(int i=0;i<10;i++){ g.drawImage(map.row3[i], 0+100*i, 0+200, this); } for(int i=0;i<10;i++){ g.drawImage(map.row4[i], 0+100*i, 0+300, this); } for(int i=0;i<10;i++){ g.drawImage(map.row5[i], 0+100*i, 0+400, this); }

Men då ritar den bara ut bilderna, jag får ju inte ut nå x och y värden då. Finns det något annat sätt som jag kan rita ut dom på? För jag fattar inte hur jag ska få ut alla variabler i en array som samtidigt ritar ut bilderna.

Visa signatur

Stationär: [Intel i5 750 2,66Ghz]-[XFX Radeon HD5770 1GB DDR5]-[ASRock P55 Extreme]-[Corsair 2x2GB DDR3]-[WD Black 640GB]-[Corsair TX 650W]
Bärbar:  MacBook Pro 13" 2011 - Unboxing - Galleri
TV-spel: Playstation 3 40GB, Xbox 360 Elite, Wii, Gamecube, N64, NES

Permalänk
Medlem

om klasser inte ingår i din nuvarande kurs så kanske du får släppa detta?
det kanske blir lite mycket att plugga sådant som ev kommer i nästa kurs?

vet ej hur din lärare ser på det, klasser är snyggast och bör användas då java är ett oo-språk...
om du visste hur det fungerade skulle du inte ha haft något problem efter alla kommentarer som lämnats, och en hel del kod.