// // Kimmon_tyonayte.java // Kimmon tyonayte // // Created by Kimmo Savolainen on 6.2.2007. // Copyright (c) 2007 Kimmo Savolainen. All rights reserved. // // Version 1.0. released 5. July 2007 // // For information on setting Java configuration information, including // setting Java properties, refer to the documentation at // http://developer.apple.com/techpubs/java/java.html // import java.util.Locale; import java.util.ResourceBundle; import java.awt.*; import java.awt.event.KeyListener; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.Timer; import javax.swing.JTextField; import javax.swing.*; public class Kimmon_tyonayte extends JFrame { private Font font = new Font("serif", Font.ITALIC+Font.BOLD, 36); //private Application fApplication = Application.getApplication(); protected Action tetrisAction, columnsAction, kimmonpeliAction, pauseAction; static final JMenuBar mainMenuBar = new JMenuBar(); protected JMenu peliMenu; boolean gameover; //boolean piirretty = false; public Pelialue taikapiiri; protected nappainPainettu nappainpainettu; protected int pistekerroin = 0; protected int pisteet= 0; protected int delay; protected Timer tikkeri; protected int rivit; protected int moodi = 1; protected JButton tet; protected JButton com; protected JButton kim; protected JTextField pistekentta; public Kimmon_tyonayte() { super(""); setTitle("Kimmon tyonayte"); setLayout(new BorderLayout()); nappainpainettu = new nappainPainettu(); //kuuntelee nŠppŠimistšŠ nappiPainettu nappipainettu = new nappiPainettu(); // kuuntelee kolmea nappia JPanel napit = new JPanel(); // kikkailua asettelun vuoksi JPanel ylakerta = new JPanel(); // " JPanel taikapiiri2 = new JPanel(); // " //PiirretŠŠn pelialue gameover = true; taikapiiri = new Pelialue(); tet = new JButton("Tetris"); com = new JButton("Columns"); kim = new JButton("Kimmon peli"); pistekentta = new JTextField("Pisteet", 7); pistekentta.setEditable(false); pistekentta.setHorizontalAlignment(JTextField.RIGHT); ylakerta.add(pistekentta); napit.add(tet); tet.addActionListener(nappipainettu); napit.add(com); com.addActionListener(nappipainettu); napit.add(kim); kim.addActionListener(nappipainettu); napit.setAlignmentX(Component.RIGHT_ALIGNMENT); taikapiiri.setPreferredSize(new Dimension(taikapiiri.tilax*20, taikapiiri.tilay*20)); taikapiiri.setSize(taikapiiri.tilax*20, taikapiiri.tilay*20); taikapiiri2.add(taikapiiri); this.getContentPane().add(ylakerta, BorderLayout.NORTH); this.getContentPane().add(taikapiiri2, BorderLayout.CENTER); this.getContentPane().add(napit, BorderLayout.PAGE_END); taikapiiri.setVisible(true); taikapiiri.show(); this.addKeyListener(nappainpainettu); setSize(400, 550); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); createActions(); addMenus(); pack(); show(); } public void createActions() { int shortcutKeyMask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); //Create actions that can be used by menus, buttons, toolbars, etc. tetrisAction = new tetrisActionClass ( "Uusi Tetris", KeyStroke.getKeyStroke(KeyEvent.VK_1, shortcutKeyMask) ); columnsAction = new columnsActionClass ( "Uusi Columns", KeyStroke.getKeyStroke(KeyEvent.VK_2, shortcutKeyMask) ); kimmonpeliAction = new kimmonPeliActionClass ( "Uusi Kimmon Peli", KeyStroke.getKeyStroke(KeyEvent.VK_3, shortcutKeyMask) ); pauseAction = new pauseActionClass ( "Pause", KeyStroke.getKeyStroke(KeyEvent.VK_P, shortcutKeyMask) ); } public void addMenus() { peliMenu = new JMenu("Peli"); peliMenu.add(new JMenuItem(tetrisAction)); peliMenu.add(new JMenuItem(columnsAction)); peliMenu.add(new JMenuItem(kimmonpeliAction)); peliMenu.add(new JMenuItem(pauseAction)); mainMenuBar.add(peliMenu); setJMenuBar (mainMenuBar); } public void Pelaa() { //PŠŠsilmukka taikapiiri.uusiPeli(); pistekentta.setText("0"); tet.setEnabled(false); com.setEnabled(false); kim.setEnabled(false); tetrisAction.setEnabled(false); columnsAction.setEnabled(false); kimmonpeliAction.setEnabled(false); requestFocusInWindow(true); //Focus tŠhŠn ikkunaan, ettŠ nŠppŠimistš toimii! pisteet = rivit = 0; taikapiiri.uusiPalikka(moodi); gameover = false; taikapiiri.repaint(); delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() {// tikkerin lauetessa siirretŠŠn palikkaa alaspŠin public void actionPerformed(ActionEvent evt) { if ( taikapiiri.onkoTilaa(3) ) taikapiiri.pelipalikka.siirraPalikkaaVahan(3); else palikkaPaikoilleen(); if ( taikapiiri.onkoPalikkaTiella() ) gameover = true; if ( gameover && tikkeri.isRunning() ) gameOver(pisteet); repaint(); } }; tikkeri = new Timer(delay, taskPerformer); if (!gameover) tikkeri.start(); else tikkeri.stop(); } public void paint(Graphics g) { taikapiiri.repaint(); super.paint(g); } public void gameOver(int pisteet) { tikkeri.stop(); System.out.println("Game Over, bitch!"); tet.setEnabled(true); com.setEnabled(true); kim.setEnabled(true); tetrisAction.setEnabled(true); columnsAction.setEnabled(true); kimmonpeliAction.setEnabled(true); } public void palikkaPaikoilleen() { int apu = 0; int apu2 = 1; taikapiiri.lisaaPalikka(); if ( moodi == 1 ) apu += taikapiiri.Poista(moodi, 0); while ( moodi == 2 && apu2 != 0 ) { apu2 = 0; apu2 += taikapiiri.Poista(moodi, 1); apu2 += taikapiiri.Poista(moodi, 2); apu2 += taikapiiri.Poista(moodi, 3); apu += apu2; } while ( moodi == 3 && apu2 != 0 ) { apu2 = 0; apu2 += taikapiiri.Poista(moodi, 0); apu += apu2; } rivit = rivit + apu; pisteet += pistekerroin * apu; pistekentta.setText(Integer.toString(pisteet)); taikapiiri.uusiPalikka(moodi); if ( delay > 100 && rivit > 0 ) tikkeri.setDelay(delay -= apu*10); if ( taikapiiri.onkoPalikkaTiella () ) gameover = true; if (gameover) gameOver(pisteet); repaint(); } public void Pause() { if ( !gameover ) { gameover = true; tikkeri.stop(); } else if ( gameover && !tikkeri.isRunning() ) { tikkeri.start(); gameover = false; } } public class nappiPainettu implements ActionListener { public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Tetris")) moodi = 1; if (e.getActionCommand().equals("Columns")) moodi = 2; if (e.getActionCommand().equals("Kimmon peli")) moodi = 3; Pelaa(); } } public class nappainPainettu implements KeyListener { public void keyTyped(KeyEvent e) { } public void keyPressed(KeyEvent e) { if (!gameover) { if ( e.getKeyCode() == KeyEvent.VK_UP ) { if (moodi == 1 || moodi == 3) { // Tetris ja Kimmon peli -moodi taikapiiri.pelipalikka.pyoritaPalikkaa(); if ( taikapiiri.onkoPalikkaUlkona() || taikapiiri.onkoPalikkaTiella() ) { taikapiiri.pelipalikka.pyoritaPalikkaa(); //palautetaan palikka lŠhtŠasentoonsa taikapiiri.pelipalikka.pyoritaPalikkaa(); taikapiiri.pelipalikka.pyoritaPalikkaa(); } if ( taikapiiri.onkoPalikkaTiella() ) gameover= true; // Kaiken varalta... if ( gameover ) gameOver(pisteet); else taikapiiri.repaint(); } if ( moodi == 2 ) { taikapiiri.pelipalikka.pyoritaVareja(); taikapiiri.repaint(); } } if ( e.getKeyCode() == KeyEvent.VK_LEFT ) { if ( taikapiiri.onkoTilaa(4) ) { taikapiiri.pelipalikka.siirraPalikkaaVahan(4); taikapiiri.repaint(); } } if ( e.getKeyCode() == KeyEvent.VK_D ) { taikapiiri.Dump("NŠppŠimistšltŠ"); } if ( e.getKeyCode() == KeyEvent.VK_RIGHT ) { if ( taikapiiri.onkoTilaa(2) ) { taikapiiri.pelipalikka.siirraPalikkaaVahan(2); taikapiiri.repaint(); } } if ( e.getKeyCode() == KeyEvent.VK_SPACE ) { pistekerroin = (int)taikapiiri.pelipalikka.paikka.getY(); while( taikapiiri.onkoTilaa(3) ) { taikapiiri.pelipalikka.siirraPalikkaaVahan(3); } palikkaPaikoilleen(); } } //if (!gameover) if ( e.getKeyCode() == KeyEvent.VK_P ) { Pause(); } if ( e.getKeyCode() == KeyEvent.VK_B ) { moodi++; if ( moodi == 4 ) moodi = 1; taikapiiri.moodi = moodi; repaint(); } } public void keyReleased(KeyEvent e) {} } public class tetrisActionClass extends AbstractAction { public tetrisActionClass(String text, KeyStroke shortcut) { super(text); putValue(ACCELERATOR_KEY, shortcut); } public void actionPerformed(ActionEvent e) { if (gameover) { moodi = 1; Pelaa(); } } } //public class piirraPelialue() { } public class columnsActionClass extends AbstractAction { public columnsActionClass(String text, KeyStroke shortcut) { super(text); putValue(ACCELERATOR_KEY, shortcut); } public void actionPerformed(ActionEvent e) { if (gameover) { moodi = 2; Pelaa(); } } } public class kimmonPeliActionClass extends AbstractAction { public kimmonPeliActionClass(String text, KeyStroke shortcut) { super(text); putValue(ACCELERATOR_KEY, shortcut); } public void actionPerformed(ActionEvent e) { if (gameover) { moodi = 3; Pelaa(); } } } public class pauseActionClass extends AbstractAction { public pauseActionClass(String text, KeyStroke shortcut) { super(text); putValue(ACCELERATOR_KEY, shortcut); } public void actionPerformed(ActionEvent e) { if (gameover) Pause(); } } public static void main(String args[]) { new Kimmon_tyonayte(); } }