Avatar billede bilde Nybegynder
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?
Avatar billede arne_v Ekspert
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 ?
Avatar billede bilde Nybegynder
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? ;)
Avatar billede bilde Nybegynder
23. april 2003 - 17:33 #3
jeg tror jeg har fundet det, kan det ikke passe at det erg.fillOval(x,y,x,y); ? :)
Avatar billede arne_v Ekspert
23. april 2003 - 18:05 #4
Jeg ville nok bruge drawArc.
Avatar billede arne_v Ekspert
23. april 2003 - 18:05 #5
Men ellers kan en cirkel jo altid emuleres ved at antal forbundne
streger.
Avatar billede bilde Nybegynder
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 :)
Avatar billede arne_v Ekspert
23. april 2003 - 18:13 #7
OK
Avatar billede bilde Nybegynder
23. april 2003 - 18:19 #8
arne har du icq eller msn?
jeg er nemlig lige stødt ind i et andet problem :(
Avatar billede arne_v Ekspert
23. april 2003 - 18:23 #9
No.

Kun email.

arne_v@mail.danbbs.dk
Avatar billede bilde Nybegynder
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.
Avatar billede arne_v Ekspert
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.
Avatar billede bilde Nybegynder
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"?
Avatar billede arne_v Ekspert
23. april 2003 - 18:43 #13
Jeg kigger på det i løbet af i aften.
Avatar billede bilde Nybegynder
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 :)
Avatar billede bilde Nybegynder
23. april 2003 - 18:43 #15
ok tak...
Avatar billede bilde Nybegynder
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?
Avatar billede arne_v Ekspert
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])
Avatar billede bilde Nybegynder
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?
Avatar billede arne_v Ekspert
23. april 2003 - 19:18 #19
Eksempel på vej.
Avatar billede bilde Nybegynder
23. april 2003 - 19:20 #20
ja tak, jeg kigger lige på det! :)
Avatar billede bilde Nybegynder
23. april 2003 - 19:38 #21
hmm array'et virker, men cirklerne flytter sig jo stadigvæk med rundt hvor man klikker...
Avatar billede arne_v Ekspert
23. april 2003 - 19:42 #22
Ja.

Fordi sådan er det kodet.

Måske skal du have arrays med x og y også.
Avatar billede bilde Nybegynder
23. april 2003 - 19:44 #23
hmmm, hvordan mener du?
Avatar billede bilde Nybegynder
23. april 2003 - 19:51 #24
jeg tror jeg er ved at forstå det nu, jeg tester lige lidt...
Avatar billede arne_v Ekspert
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);
                    }
                }
            }
Avatar billede bilde Nybegynder
23. april 2003 - 20:21 #26
mht. (((i - 1) % 3) * 100, ((i - 1) / 3) * 100, 80, 80);

Hvad er det % funktion er?
Avatar billede arne_v Ekspert
23. april 2003 - 20:23 #27
% er modulus (rest ved division)
Avatar billede bilde Nybegynder
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?
Avatar billede arne_v Ekspert
23. april 2003 - 21:16 #29
Det burde man godt kunne.

:-)
Avatar billede bilde Nybegynder
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 (-:
Avatar billede arne_v Ekspert
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
Avatar billede bilde Nybegynder
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 :(
Avatar billede arne_v Ekspert
23. april 2003 - 22:52 #33
Umiddelbart skal du vel have:

if (F[i] == 1) {
  g.drawOval
} else if (F[i] == 2) {
  g.drawLine
}
Avatar billede arne_v Ekspert
23. april 2003 - 22:53 #34
Og så skal du have lagt computerens træk ind.
Avatar billede bilde Nybegynder
23. april 2003 - 22:58 #35
hmm men F[i] den kan jo ikke være lig med 2 ?
Avatar billede bilde Nybegynder
23. april 2003 - 22:59 #36
jeg tror lige jeg dropper det ved computerens træk og nøjes med et 2 player spil :)
Avatar billede arne_v Ekspert
23. april 2003 - 23:01 #37
Undskyld men jeg troede at det var meningen at:
  0 = tom
  1 = bolle
  2 = kryds
Avatar billede bilde Nybegynder
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...
Avatar billede arne_v Ekspert
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;
Avatar billede bilde Nybegynder
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
Avatar billede arne_v Ekspert
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 !?
Avatar billede bilde Nybegynder
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...?
Avatar billede arne_v Ekspert
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
        }
    }
Avatar billede arne_v Ekspert
23. april 2003 - 23:46 #44
if (x < 101 && y < 101) {
        if (F[1] == 0) {
            F[1] = (n % 2) + 1;
        } else {
            // give error message
        }
    }
Avatar billede bilde Nybegynder
23. april 2003 - 23:48 #45
ahh ja selvfølgelig, jeg tænker vist ikke så klart mere hehe :)
Avatar billede bilde Nybegynder
24. april 2003 - 15:00 #46
nå så blev jeg færdig... og tak for hjælpen :)

Hvor mange points skylder jeg? ;)
Avatar billede arne_v Ekspert
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.
Avatar billede bilde Nybegynder
24. april 2003 - 15:42 #48
jaja selvfølgelig
sådan -> http://www.eksperten.dk/spm/344206
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester