Java Applet. Memory game, hjälp på traven

Permalänk
Medlem

Java Applet. Memory game, hjälp på traven

Har ett projekt i programmering i skolan där jag valt att göra ett memory. (läser programmering a på gymnasiet) Det är tolv rutor och är med tal 1-6
Behöver hjälp med att få till så att talen slumpas rätt och hamnar i rätt ruta. Det måste också bli två av samma tal. Vill inte ha någon färdig kod eller så behöver bara nått så jag kommer igång riktigt.
Har googlat men allt jag hittat använde "Swing", har aldrig läst det så kan inget om det.
Det ska vara en applet kan vara bra att tillägga.
Edit: vet att jag inte gjort något på själva "Motorn" bakom, vet inte riktigt hur jag ska gå till väga
Koden så här långt:

import java.applet.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class projekt_arbete extends Applet implements MouseListener { int x; int y; public void init() { setSize(800,600); this.setBackground(Color.blue); } public void paint(Graphics g){ g.setColor(Color.green); g.fillRect(10, 10, 100, 100); g.fillRect(110, 10, 100, 100); g.fillRect(210, 10, 100, 100); g.fillRect(10, 110, 100, 100); g.fillRect(10, 210, 100, 100); g.fillRect(110, 110, 100, 100); g.fillRect(110, 210, 100, 100); g.fillRect(210, 110, 100, 100); g.fillRect(210, 210, 100, 100); g.fillRect(310, 10, 100, 100); g.fillRect(310, 210, 100, 100); g.fillRect(310, 110, 100, 100); g.setColor(Color.black); g.drawRect(10, 10, 100, 100); g.drawRect(110, 10, 100, 100); g.drawRect(210, 10, 100, 100); g.drawRect(10, 110, 100, 100); g.drawRect(10, 210, 100, 100); g.drawRect(110, 110, 100, 100); g.drawRect(110, 210, 100, 100); g.drawRect(210, 110, 100, 100); g.drawRect(210, 210, 100, 100); g.drawRect(310, 10, 100, 100); g.drawRect(310, 210, 100, 100); g.drawRect(310, 110, 100, 100); } @Override public void mouseClicked(MouseEvent e) { x=e.getX(); y=e.getY(); if (10<x && x<110 && 10<y && y<110){//ruta 1 } } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }

Permalänk
Medlem

Hejsan, som jag tolkar det så vill du bara ha hjälp med att skaffa talen och slumpa dem. Detta kan du enkelt ådstakomma med en Collection av något slag som du fyller i en loop och sedan använder du den statiska metoden shuffle() i Collections. Här har du ett exempel:

ArrayList<Integer> numbers = new ArrayList<Integer>(); for(int i = 1;i<7;i++){ numbers.add(i); numbers.add(i); } Collections.shuffle(numbers);

Fråga gärna om det är någonting mer du behöver hjälp med!

MVH Fredrik

Permalänk
Medlem

Klassen Random kanske också kan vara nåt.

Permalänk
Medlem
Skrivet av pxeciffo:

Hejsan, som jag tolkar det så vill du bara ha hjälp med att skaffa talen och slumpa dem. Detta kan du enkelt ådstakomma med en Collection av något slag som du fyller i en loop och sedan använder du den statiska metoden shuffle() i Collections. Här har du ett exempel:

ArrayList<Integer> numbers = new ArrayList<Integer>(); for(int i = 1;i<7;i++){ numbers.add(i); numbers.add(i); } Collections.shuffle(numbers);

Fråga gärna om det är någonting mer du behöver hjälp med!

MVH Fredrik

Tack, kommer bli sittandes i skolan med det här i tre timmar imorgon så det är bra att ha något att gå efter!
Edit: Har aldrig jobbat med Arraylist och det där men efter att ha läst koden några gånger och börjat förstå den verkar den jätte smidig! Tack igen

Permalänk
Medlem

Varsågod! Är det någonting mer du behöver hjälp med är det bara skrika till!

Permalänk
Medlem
Skrivet av pxeciffo:

Varsågod! Är det någonting mer du behöver hjälp med är det bara skrika till!

Hur printar jag ut siffrorna jag får? Antar att jag ska göra något i paint metoden?

Permalänk
Medlem

Det stämmer nog ganska bra det. Jag föreslår att du tittar på funktionen Graphics.drawString(). Ett exempel på hur det kan se ut:

g.drawString("" + numbers.get(i), xPos, yPos);

Där i är indexet som den aktuella siffran ligger på och xPos samt yPos är positionen som du vill skriva ut siffran på.

MVH Fredrik

Permalänk

Ett hett tips är att tänka lite enligt "Seperations of Concerns", som säger i princip att en metod enbart ska göra en sak. Du har en paint-metod, men den kan i sin tur anropa andra metoder som tar hand om utritningen av andra element. Du kan så att säga "Passa runt" pennan till olika metoder som i sin tur tar hand om utmålning av olika saker.

Det jag tänker på är framförallt utritningen av alla dessa rektanglar och cirklar. Kan vara bättre att istället räkna ut vart de ska ligga i en loop, och sedan anropa en mer generell metod för utritning.

ex en metod paintButton(int , int, Graphics){//kod}

Som kan ta in två koordinater på skärmen och målar sedan en knapp bestående av en fill rect och en rect (Vilket lite är det jag anar att du vill uppnå idag). Detta skulle korta ner koden markant, och också göra det enklare att i framtiden ändra layouten på knappen.

Visa signatur

Stationär: Ryzen 9 3900X | MSI B550 Tomahawk | EVGA GTX1080 SSC | Corsair Force MP600
Kamera: Sony A7 III |Zeiss 18mm 2.8 | Sigma 35mm 1.4 | Sony 85mm 1.8 | Tamron 28-75 2.8

Permalänk
Medlem
Skrivet av RedRiderSWE:

Ett hett tips är att tänka lite enligt "Seperations of Concerns", som säger i princip att en metod enbart ska göra en sak. Du har en paint-metod, men den kan i sin tur anropa andra metoder som tar hand om utritningen av andra element. Du kan så att säga "Passa runt" pennan till olika metoder som i sin tur tar hand om utmålning av olika saker.

Det jag tänker på är framförallt utritningen av alla dessa rektanglar och cirklar. Kan vara bättre att istället räkna ut vart de ska ligga i en loop, och sedan anropa en mer generell metod för utritning.

ex en metod paintButton(int , int, Graphics){//kod}

Som kan ta in två koordinater på skärmen och målar sedan en knapp bestående av en fill rect och en rect (Vilket lite är det jag anar att du vill uppnå idag). Detta skulle korta ner koden markant, och också göra det enklare att i framtiden ändra layouten på knappen.

Jag har fortfarande problem med själva utskrivningen av mina siffror, är på väg men har fastnat. Ser ut så här än så länge:

import java.applet.*; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.util.ArrayList; import java.util.Collections; public class projekt_arbete extends Applet implements MouseListener { int x; int y; public void init() { setSize(800,600); this.setBackground(Color.blue); } public void paint(Graphics g){ g.setColor(Color.green); g.fillRect(10, 10, 100, 100); g.fillRect(110, 10, 100, 100); g.fillRect(210, 10, 100, 100); g.fillRect(10, 110, 100, 100); g.fillRect(10, 210, 100, 100); g.fillRect(110, 110, 100, 100); g.fillRect(110, 210, 100, 100); g.fillRect(210, 110, 100, 100); g.fillRect(210, 210, 100, 100); g.fillRect(310, 10, 100, 100); g.fillRect(310, 210, 100, 100); g.fillRect(310, 110, 100, 100); g.setColor(Color.black); g.drawRect(10, 10, 100, 100); g.drawRect(110, 10, 100, 100); g.drawRect(210, 10, 100, 100); g.drawRect(10, 110, 100, 100); g.drawRect(10, 210, 100, 100); g.drawRect(110, 110, 100, 100); g.drawRect(110, 210, 100, 100); g.drawRect(210, 110, 100, 100); g.drawRect(210, 210, 100, 100); g.drawRect(310, 10, 100, 100); g.drawRect(310, 210, 100, 100); g.drawRect(310, 110, 100, 100); ArrayList<Integer> nummer = new ArrayList<Integer>(); for(int i = 1;i<7;i++){ nummer.add(i); nummer.add(i); Collections.shuffle(nummer); for(i = 1;i<nummer.size();i++){ g.drawString("" + nummer.get(i),20+i*50 ,60 ); } } } @Override public void mouseClicked(MouseEvent e) { x=e.getX(); y=e.getY(); if (10<x && x<110 && 10<y && y<110){//ruta 1 } } @Override public void mouseEntered(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mousePressed(MouseEvent arg0) { // TODO Auto-generated method stub } @Override public void mouseReleased(MouseEvent arg0) { // TODO Auto-generated method stub } }

Permalänk
Medlem
Skrivet av zaaph:

Jag har fortfarande problem med själva utskrivningen av mina siffror, är på väg men har fastnat. Ser ut så här än så länge ...

Om du har shuffle inuti paint-metoden kommer du blanda om korten varje gång bilden uppdateras. Jag gissar att detta inte är önskat beteende.
För att rita ut siffrorna borde du ha en klass som representerar ett kort och sköter sin egen utritning. Något i stil med:

class Card { public static final int DEFAULT_HEIGHT = 60; public static final int DEFAULT_WIDTH = 50; private int height; private int width; private String text; private boolean upturned; public Card(String text) { this (text, DEFAULT_WIDTH, DEFAULT_HEIGHT); } public Card(String text, int width, int height) { setWidth(width); setHeight(height); setText(text); } public void setHeight(int height) { this.height = height; } public void setWidth(int width) { this.width = width; } public void setText(String text) { this.text = text; } public boolean isUpturned() { return upturned; } public void upturn() { upturned = true; } public void drawCard(Graphics g) { g.setColor(Color.WHITE); // hårdkodad kortfärg g.fillRect(0, 0, width, height); if (upturned) { FontMetrics fm = g.getFontMetrics(); int middleX = width / 2; int middleY = height / 2; int textWidth = fm.stringWidth(text); int textHeight = fm.getHeight(); g.setColor(Color.BLACK); g.drawString(text, middleX - textWidth/2, middleY + textHeight/2); } } }

Visa signatur

Kom-pa-TI-bilitet