23. april 2003 - 16:55
Der er
46 kommentarer og 2 løsninger
hjælp til billed objekter
Jeg er i gang med at lave et kryds og bolle spil. (på et simpelt niveau) Men når billederne skal indsættes dvs. "X"'erne og "O"'erne (gif fil), så skal de bruges flere gange på flere felter (være der på samme tid). Man kan selvfølgelig oprette 5 ens billeder og indsætte, men findes der ikke en lettere, mere smart metode?
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
23. april 2003 - 17:17
#1
Ikke er svar. Men var det ikke nemmere at tegne X og O i.s.f. at bruge GIF ?
23. april 2003 - 17:18
#2
jeg kan finde ud af at tegne et X, men hvordan tegner man et O, kan man få et lille sample? ;)
23. april 2003 - 17:33
#3
jeg tror jeg har fundet det, kan det ikke passe at det erg.fillOval(x,y,x,y); ? :)
23. april 2003 - 18:05
#4
Jeg ville nok bruge drawArc.
23. april 2003 - 18:05
#5
Men ellers kan en cirkel jo altid emuleres ved at antal forbundne streger.
23. april 2003 - 18:09
#6
Jeg har fundet ud af at drawOval virker fint. Du kan bare lige smide et svar hvis du vil have lidt points for hjælpen :)
23. april 2003 - 18:13
#7
OK
23. april 2003 - 18:19
#8
arne har du icq eller msn? jeg er nemlig lige stødt ind i et andet problem :(
23. april 2003 - 18:23
#9
No. Kun email. arne_v@mail.danbbs.dk
23. april 2003 - 18:31
#10
okay... mit problem er nu: jeg skal have lavet en løkke der checker hvilke felter der skal optegnes hver gang der klikkes med musen, men da jeg kun kan tegne i paint classen duer det jo ikke at lave en løkke inde fra public void mousePressed(MouseEvent e)... Har du nogle ider? jeg kan godt poste koden hvis det hjælper.
23. april 2003 - 18:37
#11
Umiddelbart vil jeg tro at mousePressed opdaterer en data-struktur der beskriver stillingen og kalder repaint - og at din paint så kigger i samme data-struktur og tegner stillingen.
23. april 2003 - 18:41
#12
jeg har lige sendt koden til din email, og som du kan se jeg har prøvet på at chekke alle F1,2,3,4,5,6,7,8,9 værdierne i forløkken, men jeg ved ikke helt hvordan man kan kombinere variablerne "Fi"?
23. april 2003 - 18:43
#13
Jeg kigger på det i løbet af i aften.
23. april 2003 - 18:43
#14
jeg vil virkelig værdsætte din hjælp, da det er en aflevering. Men bare rolig du skal nok få massere af points :)
23. april 2003 - 18:43
#15
ok tak...
23. april 2003 - 19:09
#16
jeg har lige prøvet at lave en skitse af problemet, hvis du stadigvæk har lidt tid: int F1=0; int F2=0; for (int i = 1; i > 3; i++) { if (Fi==1) { g2.drawOval(x,y,80,80); } } hvordan kan "i" sættes sammen med "F" til at chekke om F1 og F2 er lig med 1?
23. april 2003 - 19:13
#17
Jeg er igang med at kigge påd in kode. Og min "tophemmelige" polan er at erstatte F1, F2, ... med et array ! (fordi så kan man jo teste på F[i])
23. april 2003 - 19:15
#18
okay, men jeg har bare ikke prøvet at arbejde med dem før da jeg er ret ny indenfor java... kan du lave et simpelt eksempel?
23. april 2003 - 19:18
#19
Eksempel på vej.
23. april 2003 - 19:20
#20
ja tak, jeg kigger lige på det! :)
23. april 2003 - 19:38
#21
hmm array'et virker, men cirklerne flytter sig jo stadigvæk med rundt hvor man klikker...
23. april 2003 - 19:42
#22
Ja. Fordi sådan er det kodet. Måske skal du have arrays med x og y også.
23. april 2003 - 19:44
#23
hmmm, hvordan mener du?
23. april 2003 - 19:51
#24
jeg tror jeg er ved at forstå det nu, jeg tester lige lidt...
23. april 2003 - 19:55
#25
Nej - arrays er ikke nødvendigt. Prøv med: public void paint(Graphics g) { Graphics g2 = (Graphics) g; //for at der ikke tegnes fra start if (x > -1) { for (int i = 1; i <= 9; i++) { if (F[i] == 1) { g.setColor(Color.white); g2.drawOval(((i - 1) % 3) * 100, ((i - 1) / 3) * 100, 80, 80); } } }
23. april 2003 - 20:21
#26
mht. (((i - 1) % 3) * 100, ((i - 1) / 3) * 100, 80, 80); Hvad er det % funktion er?
23. april 2003 - 20:23
#27
% er modulus (rest ved division)
23. april 2003 - 21:12
#28
Jeg er ved at finde ud af hvordan X'erne skal placeres nu, men drawline har jo 4 forskellige punkter i forhold til cirklen, kan man ikke lave et ligende "regne stykke" som med cirklerne?
23. april 2003 - 21:16
#29
Det burde man godt kunne. :-)
23. april 2003 - 21:17
#30
ja men det er sku svært at regne ud, jeg er stadigvæk i tvivl om hvordan du udregnede den forrige (-:
23. april 2003 - 21:22
#31
((i - 1) % 3) * 100 , ((i - 1) / 3) * 100 er øverste venstre hjørne, så må nederste højre hjørne være: ((i - 1) % 3) * 100 + 80 , ((i - 1) / 3) * 100 + 80 og de to andre hjørner være: ((i - 1) % 3) * 100 , ((i - 1) / 3) * 100 + 80 ((i - 1) % 3) * 100 + 80 , ((i - 1) / 3) * 100
23. april 2003 - 22:45
#32
jeg har oprette en random funktion så det er tilfældigt hvornår man skifter tur, men jeg kan simpelthen ikke se hvordan det skal lade sig gøre...
Du kan se koden her:
http://www.hashjava.com/codeboard.php?user=92 den skal jo køre hele løkken igennem 9 gange for at tegne de nødvendige krydser og boller :(
23. april 2003 - 22:52
#33
Umiddelbart skal du vel have: if (F[i] == 1) { g.drawOval } else if (F[i] == 2) { g.drawLine }
23. april 2003 - 22:53
#34
Og så skal du have lagt computerens træk ind.
23. april 2003 - 22:58
#35
hmm men F[i] den kan jo ikke være lig med 2 ?
23. april 2003 - 22:59
#36
jeg tror lige jeg dropper det ved computerens træk og nøjes med et 2 player spil :)
23. april 2003 - 23:01
#37
Undskyld men jeg troede at det var meningen at: 0 = tom 1 = bolle 2 = kryds
23. april 2003 - 23:03
#38
som den er nu, er den således at 0=tom og 1=fuld...men det ville selvfølgelig være smart at lave på den anden måde...
23. april 2003 - 23:05
#39
Og hvis computeren ikke skal trækek så er det jo nemt. public class TicTacToe extends Applet implements MouseListener { ... int n = 0; int[] F = new int[10]; // vi bruger ikke index 0 ... //musselyttere public void mousePressed(MouseEvent e) { ... n++; // "101" anvendes pga. koordinaterne på gitteret if (x < 101 && y < 101) { F[1] = (n % 2) + 1;
23. april 2003 - 23:32
#40
så er den i vinkel :) Nu er problemet bare, hvordan kan man sørge for at feltet ikke bliver anvendt længere efter det har fået et kryds eller en bolle
23. april 2003 - 23:36
#41
Det skal vel være noget i retning af: if (F[i] == 0) { } Men iøvrigt skal man vel kunne klikke på den samme igen. Når begge har sat 3 skal man vel kunen flytte de eksisternde !?
23. april 2003 - 23:41
#42
Nej, det er meningen at alle felterne fyldes ud, også gøres alle felterne tomme dvs. man starter forfra igen. Men der skal vel oprettes en if (F[i] == 3) { } hvor feltet så er låst...?
23. april 2003 - 23:46
#43
Jeg ville bare: if (x < 101 && y < 101) { if (F[i] == 0) { F[1] = (n % 2) + 1; } else { // give error message } }
23. april 2003 - 23:46
#44
if (x < 101 && y < 101) { if (F[1] == 0) { F[1] = (n % 2) + 1; } else { // give error message } }
23. april 2003 - 23:48
#45
ahh ja selvfølgelig, jeg tænker vist ikke så klart mere hehe :)
24. april 2003 - 15:00
#46
nå så blev jeg færdig... og tak for hjælpen :) Hvor mange points skylder jeg? ;)
24. april 2003 - 15:04
#47
Du må vurdere hvor mange point du mener hjælpen har været værd. Rent praktisk bliver du nødt til at oprette et spørgsmål med titil "point til arne_v" og et link til dette spørgsmål for at kunne give flere points.
24. april 2003 - 15:42
#48
Kurser inden for grundlæggende programmering