Apua stragedia peliin

Voit pyytää apua ohjelmointiongelmiin täältä.
alker(vierailijana)

Apua stragedia peliin

Post by alker(vierailijana) »

Voisiko joku kertoa miten tehdään niin että kun painan jotakin kohtaa kartasta niin ukko1 kävelisi siihen kohtaan
User avatar
-Z-
Devoted Member
Posts: 682
Joined: Tue Aug 28, 2007 3:33 pm
Location: In ur danmaku, grazin ur bullets

Re: Apua stragedia peliin

Post by -Z- »

Noh, teet silleensä, että kun jotakin kohtaa klikataan, luet sen pisteen koordinaatit muuttujiin. Sitten osoitat ukon tätä pistettä kohden, ja liikutat ukkoa.
"Fallout 3 (#10) marked a shift in the industry, a move that saw the western RPG begin to surpass its Japanese counterparts." -IGN top 100 RPGs of all time
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Apua stragedia peliin

Post by phons »

Itse en osaa tehdä edes sitä valintaa :cry: ... Enkä edes ymmärrä muiden tekemiä juttuja. Strategiapeli on ihmeen vaikee tehdä.
Image
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Apua stragedia peliin

Post by Jani »

eikä ole.

näin:

asetat jos klikataan niin tallennetaan hiiren koordinaatit ja sitten käsketään ukkoa menemään sinne.

aseta jotku tunnistimet siihen vaikka.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 8:25 am

Re: Apua stragedia peliin

Post by Sly_Jack0 »

Tässäpä yksinkertainen esimerkki, jossa voi valita yhden ukon kerrallaan ja liikuttaa sitä.

Code: Select all

SCREEN 800,600

//UKOT
Type UKOT
	Field obj
	
	Field targetX	'Kohde X
	Field targetY	'Kohde Y
	
	Field selected	'Onko valittu
EndType

//Ladataan ukko jota kopioidaan
masterUkko = LoadObject("media\guy.bmp",72)
	ShowObject masterUkko,OFF 'Piilotetaan se


//Luodaan kymmenen ukkoa.
For i = 0 To 9

	ukko.UKOT = New(UKOT)
	
		ukko\obj = CloneObject(masterUkko)
			PositionObject ukko\obj,Rand(-350,350),Rand(-100,100)
			
		ukko\targetX = ObjectX(ukko\obj)
		ukko\targetY = ObjectY(ukko\obj)

Next i

//PÄÄSILMUKKA
Repeat

	//Käydään kaikki ukot läpi
	For ukko.UKOT = Each UKOT
	
		//Jos ukkoa klikataan valitaan se
		If Distance(ObjectX(ukko\obj),ObjectY(ukko\obj),MouseWX(),MouseWY()) < 15 And MouseHit(1) Then
		
			ClearMouse() 'Tyhjennetään hiiripuskuri
			ukko\selected = 1 'Valittu = 1
			
		EndIf
		
		If ukko\selected = 1 Then 'Jos ukko ON valittu niin.
		
			If MouseHit(1) Then 'Jos klikataan niin...
			
				'...asetetaan ukon kohde hiiren koordinaatteihin.
				ukko\targetX = MouseWX()
				ukko\targetY = MouseWY()
				
			EndIf
			
			'Jos painetaan hiiren oikeaa näppäintä otetaan valinta pois
			If MouseHit(2) Then ukko\selected = 0 
			
			DrawToWorld ON 'Piirto maailmakoordinaatteihin
			
				'Piirretään laatikko valitun ukon ympärille
				Box ObjectX(ukko\obj) - ObjectSizeX(ukko\obj)/2,ObjectY(ukko\obj) + ObjectSizeX(ukko\obj)/2,ObjectSizeX(ukko\obj),ObjectSizeY(ukko\obj),0
				
			DrawToWorld OFF 'Piirto ruutukoordinaatteihin
			
		EndIf
		
		'Jos ukko ei ole päämäärässään niin...
		If Distance(ObjectX(ukko\obj),ObjectY(ukko\obj),ukko\targetX,ukko\targetY) > 1 Then
		
			'...käännetään se sitä kohti ja liikutetaan sitä
			RotateObject ukko\obj,-GetAngle(ObjectX(ukko\obj),ObjectY(ukko\obj),ukko\targetX,ukko\targetY)
			
			MoveObject ukko\obj,2
			
		EndIf
		
	Next ukko
	
	DrawScreen
	
Forever
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Apua stragedia peliin

Post by phons »

Kiitos. Tuo oli sellainen esimerkki minkä minä tajusin... Mulla on pari muutaikin esimerkkiä koneellani mutta ne on ihan outoja(mulle...). :P
Image
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Apua stragedia peliin

Post by Jonez »

En voinut vastustaa kiusausta tehdä omaa esimerkkiä. :) Tässä on siis merkittävänä erona strategiapeleistä tuttu valintaboksi, jonka avulla voi suuriakin joukkoja liikutella. Hiiri 1 valitsee, hiiri 2 liikuttaa.

Kommentteja on niukasti, mutta koodin ei pitäisi olla kovin epäselvää.

Code: Select all

SCREEN 1024, 768
FrameLimit 40

Type tUkot
    Field cX
    Field cY
    Field cTX
    Field cTY
    Field cValittu
    Field cNopeus
End Type

//luodaan ukot
For i = 1 To 10
    iu.tUkot = New( tUkot )
    iu\cX = Rand( 0, ScreenWidth() )
    iu\cY = Rand( 0, ScreenHeight() )
    iu\cTX = iu\cX
    iu\cTY = iu\cY
    iu\cNopeus = 6
Next i

Repeat
    
    //mousehit tallentaa valinta-boksin aloituskoordinaatit. Mouseup: kaikki boksin sisällä olevat joukot valitaan.
    If MouseHit( 1 ) Then
        _startX = MouseX()
        _startY = MouseY()
    ElseIf MouseUp( 1 ) Then
        
        For iu.tUkot = Each tUkot
            If iu\cX > _pieninX And iu\cX < _suurinX And iu\cY > _pieninY And iu\cY < _suurinY Then
                If iu\cValittu = False Then
                    valittuja + 1
                EndIf
                iu\cValittu = True
            Else
                If iu\cValittu = True Then
                    valittuja - 1
                EndIf
                iu\cValittu = False
                
            EndIf
        Next iu
        
        _startX = 0
        _startY = 0
    EndIf
    
    //piirretään valintaboksi.
    If _startX <> 0 Or _startY <> 0 Then
        _pieninX = Min( _startX, MouseX() )
        _pieninY = Min( _startY, MouseY() )
        _suurinX = Max( _startX, MouseX() )
        _suurinY = Max( _startY, MouseY() )
        Box _pieninX, _pieninY, _suurinX - _pieninX, _suurinY - _pieninY, 0
    EndIf    
    
    //Mouse2 liikuttaa joukkoja.
    If MouseHit( 2 ) Then
        _posX = -13 * valittuja / 2
        _posY = -13 * valittuja / 2
        row = 0
        For iu.tUkot = Each tUkot
            If iu\cValittu = True Then
                
                If row = valittuja / 2 Then
                    _posY + 13
                    _posX = -13 * valittuja / 2
                EndIf
                    
                row + 1
                _posX + 13 * row
                iu\cTX = MouseX() + _posX
                iu\cTY = MouseY() + _posY
            EndIf
        Next iu
    EndIf

    //piirretään ja liikutetaan joukkoja.
    For iu.tUkot = Each tUkot
        If iu\cValittu = True Then
            Color cbGreen
            Text iu\cTX, iu\cTY, "A"
            Color cbRed
        Else
            Color cbWhite
        EndIf
        
        //liikutetaan ukkoja jotka eivät ole päämäärässään.
        If Distance( iu\cX, iu\cY, iu\cTX, iu\cTY ) > iu\cNopeus Then 
            kulma# = GetAngle( iu\cX, iu\cY, iu\cTX, iu\cTY )
            iu\cX = iu\cX + Cos( kulma# ) * iu\cNopeus
            iu\cY = iu\cY - Sin( kulma# ) * iu\cNopeus
        EndIf
        
        Text iu\cX, iu\cY, "A"
    Next iu

    DrawScreen
Forever
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Apua stragedia peliin

Post by phons »

Tällaisen kaivoin jostain koneeni uumenista:

Code: Select all


SCREEN 600,500

FrameLimit 40
DrawToWorld ON

ukkomaara=4

Dim ukko(ukkomaara)
Dim ukko_valittu(ukkomaara)
Dim ukon_hyökkäys(ukkomaara)
Dim ukon_liikkuminen(ukkomaara)

Global maailmax
Global maailmay

For i=0 To 4
ukko(i)=LoadObject("media/guy.bmp",72)

PositionObject ukko(i), Rand(-30,-150),Rand(-100,100)
ObjectPickable ukko(i),2
Next i

w=1
vihu=LoadObject("media/soldier.bmp",72)

PositionObject vihu, Rand(200,100),Rand(-100,100)
ObjectPickable vihu,2



o=MakeObject()
o2=MakeObject()
o3=MakeObject()
o4=MakeObject()


menomerkki=LoadObject("media/target.bmp",72)

mouse=LoadImage("media/mouse.bmp")
attack=LoadImage("media/ship.bmp")

väri=255



ShowObject menomerkki, ON


PositionObject menomerkki, 99999,99999

'asetetaan äijille keskenään törmäyksentunnistus
SetupCollision ukko(0),ukko(1),2,2,2 : SetupCollision ukko(0),ukko(2),2,2,2 : SetupCollision ukko(0),ukko(3),2,2,2 : SetupCollision ukko(0),ukko(4),2,2,2
SetupCollision ukko(1),ukko(0),2,2,2 : SetupCollision ukko(1),ukko(2),2,2,2 : SetupCollision ukko(1),ukko(3),2,2,2 : SetupCollision ukko(1),ukko(4),2,2,2
SetupCollision ukko(2),ukko(1),2,2,2 : SetupCollision ukko(2),ukko(0),2,2,2 : SetupCollision ukko(2),ukko(3),2,2,2 : SetupCollision ukko(2),ukko(4),2,2,2
SetupCollision ukko(3),ukko(1),2,2,2 : SetupCollision ukko(3),ukko(2),2,2,2 : SetupCollision ukko(3),ukko(0),2,2,2 : SetupCollision ukko(3),ukko(4),2,2,2
SetupCollision ukko(4),ukko(1),2,2,2 : SetupCollision ukko(4),ukko(2),2,2,2 : SetupCollision ukko(4),ukko(3),2,2,2 : SetupCollision ukko(4),ukko(0),2,2,2



Repeat
  
hiiri()


///////////// Neliövalinta
Color cbwhite
If MouseDown(1) Then


If paikkavalittu=False Then
nelx=MaailmaX
nely=-Maailmay
paikkavalittu=True



EndIf
'pistää neliönkulmat oikeisiin paikkoihin
PositionObject o,nelx,nely

PositionObject o2,maailmax,ObjectY(o)
PositionObject o3,ObjectX(o2),-maailmay
PositionObject o4,ObjectX(o),ObjectY(o3)

'piirtää itte neliön
Line ObjectX(o), ObjectY(o),maailmax,ObjectY(o)
Line ObjectX(o2), ObjectY(o2),ObjectX(o3),ObjectY(o3)
Line ObjectX(o3), ObjectY(o3),ObjectX(o4),ObjectY(o4)
Line ObjectX(o4), ObjectY(o4),ObjectX(o),ObjectY(o)

'jos ei painahiirellä poistaa neliön
ElseIf Not MouseDown(1) Then
nelx=0
nely=0
paikkavalittu=False

EndIf



///////// UKKOJE VALINTA //////////
CameraPick MouseX(),MouseY()
e=PickedObject()



For i=0 To 4

'vasemmasta yläkulmasta
If ObjectX(ukko(i))=>ObjectX(o) And ObjectX(ukko(i))=<ObjectX(o2) And ObjectY(ukko(i))=<ObjectY(o2) And ObjectY(ukko(i))=>ObjectY(o3) Then
If paikkavalittu=False Then
ukko_valittu(i)=True
EndIf
'oikeasta alakulmasta
ElseIf ObjectX(ukko(i))=<ObjectX(o) And ObjectX(ukko(i))=>ObjectX(o2) And ObjectY(ukko(i))=>ObjectY(o2) And ObjectY(ukko(i))=<ObjectY(o3) Then
If paikkavalittu=False Then
ukko_valittu(i)=True
EndIf
'vasemmasta alakulmasta
ElseIf ObjectX(ukko(i))=>ObjectX(o) And ObjectX(ukko(i))=<ObjectX(o2) And ObjectY(ukko(i))=>ObjectY(o2) And ObjectY(ukko(i))=<ObjectY(o3) Then
If paikkavalittu=False Then
ukko_valittu(i)=True
EndIf
'oikeasta yläkulmasta
ElseIf ObjectX(ukko(i))=<ObjectX(o) And ObjectX(ukko(i))=>ObjectX(o2) And ObjectY(ukko(i))=<ObjectY(o2) And ObjectY(ukko(i))=>ObjectY(o3) Then
If paikkavalittu=False Then
ukko_valittu(i)=True
EndIf
'jos painaa ukkoa
ElseIf e=ukko(i) And MouseDown(1) Then

For r=0 To ukkomaara
ukko_valittu®=False
Next r

ukko_valittu(i)=True


EndIf

'tekee ympyrän äijän ympärille
Color 0,255,0
If ukko_valittu(i)=True Then Circle ObjectX(ukko(i))-20,ObjectY(ukko(i))+20, 40,OFF



Next i
////////////////////////////////////7


For i=0 To 4
///// "HYÖKKÄYS" //////

If e=vihu Then
ShowMouse attack
Else
ShowMouse mouse
EndIf


'jos hiiri on vihun päällä ja painaa hiiren oikeeta niin "hyökkää"
If e=vihu And MouseDown(2) Then
'tavallinen liikkuminen pois päältä
For t=0 To ukkomaara
ukon_liikkuminen(t)=0
Next t

PositionObject menomerkki, 99999,9999

If ukko_valittu(i)=1 Then
PointObject ukko(i), vihu
ukon_hyökkäys(i)=ON
EndIf
EndIf

'jos hyökkäys päällä niin liikutaan vihua kohti
If ukon_hyökkäys(i)=ON Then MoveObject ukko(i), 2


If Distance2(ukko(i),vihu)<100 And ukon_hyökkäys(i)=ON Then

'hyökkäys pois päältä kun se on tehty
For w=0 To ukkomaara
ukon_hyökkäys(w)=OFF
Next w
//AMMUNTA
ampuminen=ON
EndIf

If ampuminen=ON Then
Color väri,väri,väri
Text 0,0, "PUM"
väri=väri-1
If väri<1 Then
ampuminen=OFF
ClearText
väri=255
EndIf
EndIf

/////////////////////////////
////////// LIIKKUMINEN
If MouseDown(1) And e=0 Then
For z=0 To ukkomaara
ukko_valittu(z)=0
Next z
EndIf

If MouseDown(2) And e=0 Then


If menopaikka=False Then
menox=MaailmaX
menoy=-Maailmay
'menopaikka=True
PositionObject menomerkki,menox,menoy
EndIf

'ei liikuteta ukkoja joita ei ole valittu
If ukko_valittu(i)=ON Then ukon_liikkuminen(i)=ON

'laitetaan ukko_hyökkäys pois päältä
For u=0 To ukkomaara
ukon_hyökkäys(u)=OFF
Next u



EndIf

'varsinainen liikutus
If ukon_liikkuminen(i)=ON Then
PointObject ukko(i), menomerkki
MoveObject ukko(i),2
EndIf

'jos joku ukoista koskee objectia niin kaikki pysähtyy

For p=0 To ukkomaara
If ObjectsOverlap(ukko(p),menomerkki) Then paikalla=True
Next p


If paikalla=True Then ukon_liikkuminen(i)=False : paikalla=False


Next i

DrawScreen
Forever



'muutetaan ruudun koordinaatit maailman koordinaateiksi
Function hiiri()

hiiriX=MouseX()
hiiriY=MouseY()

MaailmaX = CameraX()-ScreenWidth()/2+hiiriX
MaailmaY = -CameraY()-ScreenHeight()/2+hiiriY

End Function
Itse en tiedä kenen tämä on, mutta jos joku tunnistaa tämän omakseen tai kaverin tekemäksi niin saa sanoa...
Image
alker(vierailijana)

Re: Apua stragedia peliin

Post by alker(vierailijana) »

Nyt tuli seuraava ongelma...pitäisi saada sellainen palkki joka ei olisi kartalla ja kuitenkin pelin alakulmassa
Requiem for Anthrax
Active Member
Posts: 155
Joined: Wed Dec 03, 2008 8:17 pm
Location: Haukipudas

Re: Apua stragedia peliin

Post by Requiem for Anthrax »

käytä pelkkiä kuvia.
kato kuvakomennot.
Turmankylä
huonoja pelejä, purkkaisia viritelmiä, tylsiä tarinoita.
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Apua stragedia peliin

Post by Jani »

DrawGame ?
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
alker(vierailijana)

Re: Apua stragedia peliin

Post by alker(vierailijana) »

Jani wrote:DrawGame ?
"Piirtää kaikki kartat, objektit ja partikkelit perustuen kameran sijaintiin.

Tätä komentoa ei ole pakko kutsua, vaan CoolBasic suorittaa sen automaattisesti ennen kuin ruutu piirretään.

Joskus peli pitää piirtää ennen muita grafiikkakomentoja. Esimerkiksi teksti voi muuten peittyä kartan tai "lattiaobjektin" alle. Käytä tätä komentoa piirtämään peli ennen tekstiä ja muuta grafiikkaa."
Mihin tarvitsen komentoa jos cool basic tekee sen automaattisesti?-.-
Jani
Devoted Member
Posts: 741
Joined: Fri Oct 31, 2008 4:53 pm

Re: Apua stragedia peliin

Post by Jani »

Laita tekstit laatikot sun muut viimeisenä ja ennen niitä kirjoita DrawGame sitten nuo.
Dead men tell no tales. Also, Python rocks!
Codegolf: 99 bottles of beer (oneliner) - Water map partition
Valtzu
Active Member
Posts: 115
Joined: Sun Aug 26, 2007 2:40 pm
Location: Sauvo
Contact:

Re: Apua stragedia peliin

Post by Valtzu »

DrawToScreen?
DrawToWorld?
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Apua stragedia peliin

Post by TheFish »

alker(vierailijana) wrote:
Jani wrote:DrawGame ?
"Piirtää kaikki kartat, objektit ja partikkelit perustuen kameran sijaintiin.

Tätä komentoa ei ole pakko kutsua, vaan CoolBasic suorittaa sen automaattisesti ennen kuin ruutu piirretään.

Joskus peli pitää piirtää ennen muita grafiikkakomentoja. Esimerkiksi teksti voi muuten peittyä kartan tai "lattiaobjektin" alle. Käytä tätä komentoa piirtämään peli ennen tekstiä ja muuta grafiikkaa."
Mihin tarvitsen komentoa jos cool basic tekee sen automaattisesti?-.-
kuten tuossa lainaamassasi manuaalin pätkässä sanotaan, grafiikkakomennot (kuvat, tekstit, piirtokomennot) menevät kartan ja objektien alle normaalisti. Eli jos ne tahtoo objektien päälle, täytyy laittaa tuo drawgame ennen niiden piirtämistä.
EDIT:

En nyt kyllä ihan ymmärtänyt tuota kysymystä, joten en tiedä miten tämä siihen liittyy. Nuo minua ennen olevat vastauksetkin näyttää vähän siltä että porukka vain heittää randomilla komentoja ymmärtämättä kysymyksestä paljoa sen enempää kuin minäkään.

Last edited by TheFish on Tue Dec 30, 2008 8:21 pm, edited 1 time in total.
CoolBasic henkilökuntaa
Kehittäjä
Guest

Re: Apua stragedia peliin

Post by Guest »

alker(vierailijana) wrote:
Jani wrote:DrawGame ?
"Piirtää kaikki kartat, objektit ja partikkelit perustuen kameran sijaintiin.

Tätä komentoa ei ole pakko kutsua, vaan CoolBasic suorittaa sen automaattisesti ennen kuin ruutu piirretään.

Joskus peli pitää piirtää ennen muita grafiikkakomentoja. Esimerkiksi teksti voi muuten peittyä kartan tai "lattiaobjektin" alle. Käytä tätä komentoa piirtämään peli ennen tekstiä ja muuta grafiikkaa."
Mihin tarvitsen komentoa jos cool basic tekee sen automaattisesti?-.-
Hups en lukenut tuota kokonaan :D
alker(vierailijana)

Re: Apua stragedia peliin

Post by alker(vierailijana) »

Image eli tuollaista alareunassa olevaa palkki olen tekemässä...siihen tulee kaikki talot kun painaa niitä niin saat valita mihin se rakentaa sen jne.
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Apua stragedia peliin

Post by phons »

Sen alapalkin saa sinne ihan Box komennolla. Ja otit ton kuvan Age of Empires 2:sta, joten en usko että päädyt noin isoon projuun. Minullakin on onglemana tuo talon paikan valinta hiirellä.
Image
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: Apua stragedia peliin

Post by TheFish »

Tuon tyylisen palkin saat siis tehtyä helposti kuvana. Tässä pitää tosiaan laittaa se drawgame ennen kuvan piirtoa, jos käytät cb:n omaa karttamoottoria. Tosin aoehan käyttää isometrisiä karttoja, joita ei cb:n omalla moottorilla pysty tekemään, eli jos teet myös kartan kuvilla et välttämättä tarvitse drawgamea.

Voisi tietysti viilata pilkkua sen verran, että mainitsen sen olevan strategia, ei stragedia.
CoolBasic henkilökuntaa
Kehittäjä
alker(vierailijana)

Re: Apua stragedia peliin

Post by alker(vierailijana) »

phons wrote:Sen alapalkin saa sinne ihan Box komennolla. Ja otit ton kuvan Age of Empires 2:sta, joten en usko että päädyt noin isoon projuun. Minullakin on onglemana tuo talon paikan valinta hiirellä.
Sama juttu mulla...se heittää sen talo\obj johonkin helvettiin aina
Post Reply