webForumDet fria alternativet

Hjälp med att få fram bilder i memory....

2 svar · 318 visningar · startad av AnyOne

AnyOneMedlem sedan mars 20063 inlägg
#1

Jag har ett litet problem, jag har skapat ett memory, men bilderna visas inte, istället så visas gråa för de ställen som är "taggade" och givit poäng, medans de som ännu ska vändas blir vita, någon som kan hjälpa?

Kod:
Kod:
import java.awt.*;
import java.applet.*;//Detta är appleten som ger dig tillgång till nya funktioner
import java.net.*;// bildernas funktioner finns inpackat här.

public class Memory extends Applet

{
table t;// Därman ser korten
Button newgame,surrender;//knappar
Label l1;//poängen
Choice mychoice;
String mylevel="easy";

public void init()//Mina förberedelser
{
resize(9*table.SIZE+20,8*table.SIZE+70);
System.out.println((9*table.SIZE+20)+":"+(8*table.SIZE+70));
setBackground(Color.white);
Panel buttons=new Panel();
buttons.setLayout(new GridLayout(1,4,2,2));// positioner på bilderna
buttons.add(newgame=new Button("Nytt spel"));
buttons.add(surrender=new Button("Visa mig alla"));
mychoice=new Choice();
mychoice.add("Lätt");
mychoice.add("Lagom");
mychoice.add("Svårt");
buttons.add(mychoice);
l1=new Label();
l1.setFont(new Font("Arial",Font.PLAIN,20));
l1.setBackground(Color.green);
buttons.add(l1);
add("Center",t=new table(this,l1));
add("South",buttons);
}
public boolean action(Event ev, Object obj)
// Detta är när man trycker på en knapp
{
if(ev.target==newgame)
t.randomcards();
else if(ev.target==surrender)
t.showall();
else if (ev.target==mychoice)
{String s=mychoice.getSelectedItem();
if (s.equals("easy")&&!s.equals(mylevel))
t.resizemem(8);
else if (s.equals("normal")&&!s.equals(mylevel))
t.resizemem(16);
if (s.equals("hard")&&!s.equals(mylevel))
t.resizemem(32);
mylevel=s;
}
return true;
}

}

class table extends Canvas implements Runnable
{
int[] visbuf;// Det som du ser.
int[] card;// korten
Applet applet;
final static int TOTAL=16;//Antal nummer kort i spelet
final static int BACK=16;//Kort som ligger nedvänt
final static int NONE=-2;//Inga kort
final static int SIZE=52;//Pixelstorlek på våra kort
final static int PICOFFSET=1;
int PCMEMSIZE=8;//starta på lätt.
int pos1,pos2;//Var alla "öppna" kort ligger.
final static int USER1=21,USER2=22,USER3=23,PC1=24,PC2=25,PC3=26,WAIT=27;
int state;
/*Startar spelet*/
int pcchoice1,pcchoice2;
int[] pcmem;
int pcmemstart;
Color gray=new Color(204,204,204);

int pointspc,pointsuser;
Image[] picture;//Bilder
Label l1;//Meddelanden

MediaTracker MT;

table(Applet a,Label a_label)
{
setBackground(Color.green);
l1=a_label;//Meddelande-labels
applet=a;//Vilken applet vi kör
visbuf=new int[TOTAL];
card=new int[TOTAL];
pcmem=new int[PCMEMSIZE];
resize(9*SIZE,6*SIZE);//Storlek för att se allt
picture= new Image[9];//8 bilder, + baksidorna
URL base=applet.getDocumentBase();
MT=new MediaTracker(this);

for(int i=0;i<8;i++)
{try
{
picture*=applet.getImage(new URL(base,i+".gif");
MT.addImage(picture*,0);
}
catch(MalformedURLException e)
{System.out.println("loading failed");}
}
randomcards();//Blanda
showall();
new Thread(this).start();
}

int pcmakechoice1()
{
//Kollar om det finns ett par
for(int i=0;i<PCMEMSIZE;i++)
if(pcmem*!=-1&&visbuf[pcmem*]==BACK)
for(int j=i+1;j<PCMEMSIZE;j++)
if(pcmem[j]!=-1
&&pcmem*!=pcmem[j]
&&card[pcmem*]==card[pcmem[j]])
{
System.out.println("firstchoice="+pcmem*);
return pcmem*;
}
//Välj ett kort du inte valt
return pcunseencard();
}

int pcunseencard()
{ int result;
boolean good;
System.out.println("picking unseen card");
do
{
good=true;
result=(int)(Math.random()*TOTAL);
if(visbuf[result]!=BACK)
good=false;
for(int i=0;i<PCMEMSIZE;i++)
if(pcmem*==result)
good=false;
}
while(!good);
return result;
}

int pcmakechoice2()
{
for(int i=0;i<PCMEMSIZE;i++)
if(pcmem*!=-1&&
card[pos1]==card[pcmem*]&&
pos1!=pcmem*)
{
System.out.println("match found");
return pcmem*;
}
return pcunseencard();
}

void clearpcmem()
{
for(int i=0;i<PCMEMSIZE;i++)
pcmem*=-1;
pcmemstart=0;
}

void pcremember(int card)
{
pcmem[pcmemstart]=card;
pcmemstart=(pcmemstart+1)%PCMEMSIZE;
}

void printpcmem()
{
String s="[";
for(int i=0;i<PCMEMSIZE;i++)
s+=pcmem*+((pcmem*==-1)?" ":("("+card[pcmem*]+")"));
System.out.println(s+"]");

}

void resizemem(int newvalue)
{
int[] newmem=new int[newvalue];
int i;
for(i=0;i<newvalue;i++)
{
if(i<PCMEMSIZE)
newmem*=pcmem[(i+pcmemstart)%PCMEMSIZE];
else
newmem*=-1;
}
pcmemstart=PCMEMSIZE<newvalue?PCMEMSIZE:0;
PCMEMSIZE=newvalue;
pcmem=newmem;
}

void showall()//Visa alla kort
{
for(int i=0;i<TOTAL;i++)
visbuf*=card*;//Bilder hamnar i visbuf
repaint();//"refresha" allt
state=WAIT;//Inga musklick räknas
}

void addpoints(int a,int b)
{
pointsuser+=a;
pointspc+=b;
showscores();
}

void showscores()
{
l1.setText(" "+pointsuser+"/"+pointspc);
}

void randomcards()
//Blanda korten och lägg ner på bordet.
{
clearpcmem();
pointspc=pointsuser=0;
showscores();
for(int i=0;i<TOTAL;i++)
{visbuf*=BACK;
card*=NONE;
}
state=USER1;
repaint();//En annan visbuf.
for(int cards=0;cards<TOTAL;cards++)
{//Varje kort vi lägger ner, händer detta.
int r=(int)(Math.random()*(TOTAL-cards));
//r är tomma platser.
int i=0;
while(true)
//Vi letar efter tomma platser.
{
if(card*==NONE)
{r--;}//Tom plats hittad.
if(r<0)//Tillräckligt många tomplatser hittade.
break;//loopen slutar.
else
i++;//starta om loopen.
}
card*=cards/2;//lägg kort på tom plats
//Alla siffror mellan 1-16 läggs ner tillsammans.
}
}

public boolean mouseDown(Event ev,int x,int y)
/*6 möjligheter:
-> state==USER1: Du har öppnat ett kort. Korten ligger i position 1.
-> state==USER2.Du vänder ett annat kort, position2.
-> state==USER3: Du har vänt på 2 kort, är de 2 korten samma stannar de och ger dig poäng, annars vänder de tillbaka.
*/
{
if(state==WAIT)
return true;
if(pointspc+pointsuser==36)
return true;
if(state==USER3||state==PC3)//Position tre, här är 2 kort öppna och kontrolleras.
{
if(card[pos2]==card[pos1])//samma kort, ger poäng.
{visbuf[pos2]=card[pos2]=NONE;
visbuf[pos1]=card[pos1]=NONE;//Inte samma, vänder tillbaka.
if(state==USER3)
{
addpoints(1,0);
state=USER1;
}
else
{
addpoints(0,1);
state=PC1;
}
}
else
{
visbuf[pos2]=visbuf[pos1]=BACK;//vänder tillbaka korten här från kommandot av föregående kod.
state=(state==USER3)?PC1:USER1;
}
repaint();
return true;
}

//Ett eller noll kort vända.
if(state==USER1||state==USER2)
{
x=x/SIZE;
y=y/SIZE;//Kordinaterna på korten.
int pos=x+9*y;//Konverterar kordinaterna på korten.
if(x<0||x>=9||y<0||y>=8||visbuf[pos]!=BACK)
return true;
/*Musklicket måste vara inom spelplanen för att något ska hända*/
visbuf[pos]=card[pos];//Visa kort
pcremember(pos);
repaint();
if(state==USER1)
pos1=pos; //Här sparas kortet.
else
pos2=pos;//Sparas åter.
state++;
return true;
}
else if(state==PC1)
{
pos1=pcmakechoice1();
visbuf[pos1]=card[pos1];//Visa kort.
pcremember(pos1);
repaint();
state++;
}
else
{
pos2=pcmakechoice2();
visbuf[pos2]=card[pos2];//visa kort igen.
pcremember(pos2);
repaint();
state++;
}
return true;
}

public void paint(Graphics g)
/*Rita alla korts grafik. */
{
for(int i=0;i<TOTAL;i++)
{int x=i%9;
int y=i/9;//kordinater.
paintfield(g,x,y,visbuf*);
}
g.setColor(Color.black);
if(!MT.checkAll(true))
g.drawString("Vänta...",20,20);
printpcmem();
}

void paintfield(Graphics g,int x,int y,int value)
/*Visar ett fält.*/
{
int sx=x*SIZE;
int sy=y*SIZE;
g.setColor(white);
g.fillRect(sx,sy,SIZE,SIZE);
if(value!=NONE)
drawimage(g,sx+PICOFFSET,sy+PICOFFSET,value);
}

void drawimage(Graphics g,int sx,int sy,int imno)
/*Ritar bild på dess rätta position..*/
{
if(g.drawImage(picture[imno],sx,sy,null)!=true)
{
g.setColor(Color.white);
g.fillRect(sx+PICOFFSET,sy+PICOFFSET,
SIZE-PICOFFSET,SIZE-PICOFFSET);
}

/*Om bilden inte finns ritar vi en grå ruta*/
}

public void update(Graphics g)
//Här rensar skärmen alla färger och ritar om. skärmen kan blinka till//*
{ paint(g);}

public void run()
{
try
{
while (MT.waitForAll(2000)&&!MT.checkAll(true))
{
System.out.println("waiting");
repaint();
}
}catch(Exception e)
{e.printStackTrace();
}
System.out.println("done!");
repaint();
}
}

Och här är HTMLdokumentet där bilderna kallas ifrån:
<HTML>
<HEAD>
<TITLE>MyApplet Example1</TITLE>
</HEAD>
<BODY>
<H1>MyApplet</H1>
<HR>
<P>
<APPLET CODE="Memory.class" WIDTH="300" HEIGHT="300">
<param name=picture value=black.gif>
<param name=picture value=blue.gif>
<param name=picture value=brown.gif>
<param name=picture value=greetn.gif>
<param name=picture value=red2.gif>
<param name=picture value=red.gif>
<param name=picture value=pink.gif>
<param name=picture value=white.gif>
<param name=picture value=yellow.gif>
</APPLET>
</P>
<HR>
</BODY>
</HTML>

Om det skulle vara någon här som skulle kunna hjälpa skulle det vara snällt.**************************

LimeMedlem sedan sep. 2001961 inlägg
#2

Två saker.

1. Hur du berättar vilka bilder som ska användas.

<param name=picture1 value=black.gif>
<param name=picture2 value=blue.gif>
<param name=picture3 value=brown.gif>
<param name=picture4 value=greetn.gif>
<param name=picture5 value=red2.gif>
<param name=picture6 value=red.gif>
<param name=picture7 value=pink.gif>
<param name=picture8 value=white.gif>
<param name=picture9 value=yellow.gif>

2. Hur du laddar bilderna.

for (int i = 0; i < 8; i++) {
			try {
				String imageName = applet.getParameter("picture" + i);
				picture[i] = applet.getImage(new URL(base, imageName));
				MT.addImage(picture[i], 0);
			} catch (MalformedURLException e) {
				System.out.println("loading failed");
			}
		}

Sedan finns det lite andra småsaker som inte funkar men det är helt annan femma.

Tips: Använd applet-parametrarna för att ladda de speciella baksidorna och utkryssade bilderna, t.ex. genom att namnge dem "background".

AnyOneMedlem sedan mars 20063 inlägg
#3

Ah ok, tackar.

137 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)