WASD Skrivet 21 Juli 2010 Rapport Dela Skrivet 21 Juli 2010 (redigerat) Från skaparen av: WASD Radio, WASD Chat, WASD RPG, WASD Skraplotter, etc... kommer nu: WASD 4-i-rad! http://dl.dropbox.com/u/7999872/WASD%204-i-rad.jar Uppdatering: Botten är nu smart :) Edit: Lagt in Anti-aliasing :D Före: http://i.imgur.com/gzcIO.png Efter: http://i.imgur.com/madJ8.png Gjorde detta programmet på typ 1-2 timmar. Feedback pl0x :) Bottens algoritm: 1. Botten kollar ifall den kan vinna, botten lägger där isåfall. 2. Botten kollar ifall du kan vinna, den blockar dig isåfall. 3. Botten slumpar nånstans att lägga. Ifall du kan vinna efter att den lägger där den slumpade så slumpar den en ny plats tills du inte kan vinna också lägger den där. 4. Om du inte kan vinna var botten än lägger så slumpar den bara nåt. Exempel: Ifall den lägger på steg 2 hoppar den ur algoritmen och kollar inte 3 och 4. Har skydd emot att den fastnar i en loop på steg 3 ifall du kan vinna var botten än lägger. Källkod: (Algoritmen är inte med här, botten slumpar var den ska lägga) import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferStrategy; import java.util.Random; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; public class Main extends Canvas{ private boolean running = true; private int[][] row = new int[7][6]; private BufferStrategy strategy; private JFrame container; private Color cc = new Color(0, 0, 180); public static void main(String[] args) { Main m = new Main(); m.rita(); } public Main(){ container = new JFrame("WASD 4-i-rad"); JPanel panel = (JPanel)container.getContentPane(); panel.setPreferredSize(new Dimension(460,400)); panel.setLayout(null); setBounds(0,0,605,405); container.setLocation(300, 200); panel.add(this); setIgnoreRepaint(true); addMouseListener(new mouseList()); container.pack(); container.setResizable(false); container.setVisible(true); container.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); requestFocus(); createBufferStrategy(2); strategy = getBufferStrategy(); for (int x = 0; x < 7; x++) { for (int y = 0; y < 6; y++) { row[x][y]=0; } } } private class mouseList extends MouseAdapter{ @Override public void mousePressed(MouseEvent e) { if(putnito((e.getX()-7)/64, true)) botput(); else JOptionPane.showMessageDialog(container, "Du kan inte lägga här."); } } private void rita(){ while(running){ Graphics2D g = (Graphics2D) strategy.getDrawGraphics(); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.setColor(cc); g.fillRect(0,0,605,405); for (int x = 0; x < 7; x++) { for (int y = 0; y < 6; y++) { switch(row[x][y]){ case 0: g.setColor(Color.white); break; case 1: g.setColor(Color.green); break; case 2: g.setColor(Color.red); break; } g.fillOval(15+x*64, 15+y*64, 50, 50); } } g.dispose(); strategy.show(); try { Thread.sleep(20); } catch (Exception ex) { } } } private boolean putnito(int x, boolean player){ boolean avalible=(row[x][0]==0); if(avalible){ int y=5; for (int i = 5; i > -1; i--) { if(row[x][i]==0){ y=i; row[x][i]=(player? 1 : 2); break; } } } testwin(); return avalible; } private void botput(){ Random rand = new Random(); boolean temp = false; do{ temp = putnito(rand.nextInt(7), false); }while(!temp); } private void checknowinner(){ boolean nowin = true; for (int x = 0; x < 7; x++) { for (int y = 0; y < 6; y++) { if(row[x][y]==0) nowin=false; } } if(nowin){ JOptionPane.showMessageDialog(container, "Ingen vann denna rundan!\n Tryck OK för att starta nytt spel."); newgame(); } } private void testwin(){ int winner = 0; for (int x = 0; x < 4; x++) { // - for (int y = 0; y < 6; y++) { if(row[x][y]==1 && row[x+1][y]==1 && row[x+2][y]==1 && row[x+3][y]==1) winner=1; else if(row[x][y]==2 && row[x+1][y]==2 && row[x+2][y]==2 && row[x+3][y]==2) winner=2; } } for (int x = 0; x < 7; x++) { // | for (int y = 0; y < 3; y++) { if(row[x][y]==1 && row[x][y+1]==1 && row[x][y+2]==1 && row[x][y+3]==1) winner=1; else if(row[x][y]==2 && row[x][y+1]==2 && row[x][y+2]==2 && row[x][y+3]==2) winner=2; } } for (int x = 0; x < 4; x++) { // \ for (int y = 0; y < 3; y++) { if(row[x][y]==1 && row[x+1][y+1]==1 && row[x+2][y+2]==1 && row[x+3][y+3]==1) winner=1; else if(row[x][y]==2 && row[x+1][y+1]==2 && row[x+2][y+2]==2 && row[x+3][y+3]==2) winner=2; } } for (int x = 3; x < 7; x++) { // / for (int y = 0; y < 3; y++) { if(row[x][y]==1 && row[x-1][y+1]==1 && row[x-2][y+2]==1 && row[x-3][y+3]==1) winner=1; else if(row[x][y]==2 && row[x-1][y+1]==2 && row[x-2][y+2]==2 && row[x-3][y+3]==2) winner=2; } } if(winner==1){ JOptionPane.showMessageDialog(container, "Du vann denna rundan!\n Tryck OK för att starta ett nytt spel."); newgame(); } else if(winner==2){ JOptionPane.showMessageDialog(container, "WASDs professionellt kodade bot vann denna rundan! \nTryck OK för att starta ett nytt spel."); newgame(); } else checknowinner(); } private void newgame(){ for (int x = 0; x < 7; x++) { for (int y = 0; y < 6; y++) { row[x][y]=0; } } } } Jag tycker koden ser proffsig ut http://www.fuska.se/forum/style_images/ip.boardpr/folder_post_icons/icon12.gif Metoden "putnito" var misstype av "putinto" (put into, lägg i) men jag lät den vara putnito :P Ni som blivit inspirerade av mig att lära er Java får gärna kopiera den och experimentera runt och fråga ifall det är något ni inte förstår. Redigerat 22 Juli 2010 av WASD Citera Länk till kommentar Dela på andra sajter More sharing options...
Laserturken Skrivet 21 Juli 2010 Rapport Dela Skrivet 21 Juli 2010 Nice! Jag tycker spelet borde ligga i WASD.nu efter den är klar :) Citera Länk till kommentar Dela på andra sajter More sharing options...
WASD Skrivet 21 Juli 2010 Författare Rapport Dela Skrivet 21 Juli 2010 Nice! Jag tycker spelet borde ligga i WASD.nu efter den är klar :)Det är tänkt att WASD.nu ska bli ett textbaserat spel men jag kanske skaffar en sida där jag lägger in alla javaprogram jag gjort :) Citera Länk till kommentar Dela på andra sajter More sharing options...
Laserturken Skrivet 22 Juli 2010 Rapport Dela Skrivet 22 Juli 2010 Nice! Jag tycker spelet borde ligga i WASD.nu efter den är klar :)Det är tänkt att WASD.nu ska bli ett textbaserat spel men jag kanske skaffar en sida där jag lägger in alla javaprogram jag gjort :) Ok :) Citera Länk till kommentar Dela på andra sajter More sharing options...
WASD Skrivet 22 Juli 2010 Författare Rapport Dela Skrivet 22 Juli 2010 (redigerat) Uppdatering: Lagt in Anti-aliasing :D Ladda ner i första inlägget, samma länk. Källkoden också uppdaterad. Före och Efter Anti-aliasing: http://i.imgur.com/gzcIO.png http://i.imgur.com/madJ8.png Redigerat 22 Juli 2010 av WASD Citera Länk till kommentar Dela på andra sajter More sharing options...
KeeperofMee Skrivet 22 Juli 2010 Rapport Dela Skrivet 22 Juli 2010 (redigerat) Gött spel är bara lite för lätt att vinna det är jag som spelar :) Wasd 4 i rad ...Jag spelar Redigerat 22 Juli 2010 av KeeperofMee Citera Länk till kommentar Dela på andra sajter More sharing options...
Gäst Jesus Skrivet 22 Juli 2010 Rapport Dela Skrivet 22 Juli 2010 Bra och snyggt men du kanske kan göra så att man kan ställa in svårighetsgrad, huruvida det ska vara 2, 3, 4, 5 eller t.o.m 6 i rad etc. Citera Länk till kommentar Dela på andra sajter More sharing options...
Poesi Skrivet 22 Juli 2010 Rapport Dela Skrivet 22 Juli 2010 Som sagt är det för lätt att vinna, klicka bara på samma rad hela tiden utan att bry dig om vad motståndare gör så vinner du. Citera Länk till kommentar Dela på andra sajter More sharing options...
Gäst CrazyCake Skrivet 22 Juli 2010 Rapport Dela Skrivet 22 Juli 2010 (redigerat) Gött spel är bara lite för lätt att vinna det är jag som spelar :) Wasd 4 i rad ...Jag spelar Såklart så vill vi se när du spelar.Fast kanske inte. Fint WASD, men du får verkligen fixa boten, way to easy :) Edit:"WASDs professionellt kodade bot vann denna runda" :D Redigerat 22 Juli 2010 av CrazyCake Citera Länk till kommentar Dela på andra sajter More sharing options...
zitroz Skrivet 22 Juli 2010 Rapport Dela Skrivet 22 Juli 2010 Gör det svårare.. alldeles för lätt nu :( Citera Länk till kommentar Dela på andra sajter More sharing options...
Laserturken Skrivet 22 Juli 2010 Rapport Dela Skrivet 22 Juli 2010 Sätt in en hjärna på botten så funkar den bättre. Citera Länk till kommentar Dela på andra sajter More sharing options...
WASD Skrivet 22 Juli 2010 Författare Rapport Dela Skrivet 22 Juli 2010 Jag har skrivit i första inlägget att jag ska det. Antagligen fixar jag det idag. Citera Länk till kommentar Dela på andra sajter More sharing options...
Rekommendera inlägg
Gå med i konversationen
Du kan skriva nu och registrera dig senare. Om du har ett konto, logga in nu för att posta med ditt konto.