Игра начинающего программиста - Java
Формулировка задачи:
В общем проблема такая есть игра, когда её запускаешь, то какой бы ты не выбрал уровень сложности то все равно выпадают только 2 вида картинок, а их 7!
Код игры:
okno:
// Подключения необходимых библиотек import javax.swing.*; import java.awt.*; import java.awt.event.*; // Класс окна, в котором размещено игровое поле class okno extends JFrame { private static final long serialVersionUID = 1L; private pole gameP; // Закрытая Переменная класса - игровое поле private int slogn; // Закрытая Переменная класса - сложность игры // Обработчик событий нажатий на клавиши private class myKey implements KeyListener { // Метод, который срабатывает при нажатии public void keyPressed(KeyEvent e) { // Получение кода нажатой клавиши int key_ = e.getKeyCode(); // Выход из программы, если нажат - Esc if (key_==27) System.exit(0); else if (key_==37) // Если нажата стрелка влево { // Контроль перемещения влево за пределы окна if (gameP.x-30>-48) gameP.x-=30; else gameP.x=752; } /*else if (key_==38) // Если нажата стрелка вверх { // Контроль перемещения вверх за пределы окна if (gameP.y-30>0) gameP.y-=30; else gameP.y=465; } else if (key_==40) // Если нажата стрелка down { // Контроль перемещения down за пределы окна if (gameP.y+30<465) gameP.y+=30; else gameP.y=0; }*/ else if (key_==39) // Если нажата стрелка вправо { // Контроль перемещения вправо за пределы окна if (gameP.x+30<752) gameP.x+=30; else gameP.x=-48; } } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} } // Конструктор класса public okno(int slogn) { // Помещение сложности, выбранной пользователем в переменную класса this.setSlogn(slogn); // Подключение обработчика события для клавиатуры к окну addKeyListener(new myKey()); // Установка активности окна setFocusable(true); // Задание размеров и положения окна setBounds(10,10,800,600); // Задание заголовка окна setTitle("Игра: Помоги системному администратору"); // Запрет изменения размеров окна setResizable(false); // Операция завершения работы приложения при // закрытии окна setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Создание объекта - игрового поля gameP = new pole(slogn); // Прикрепление (вложение) панели - игрового поля в окно Container con = getContentPane(); con.add(gameP); // Сделать окно видимым setVisible(true); } public int getSlogn() { return slogn; } public void setSlogn(int slogn) { this.slogn = slogn; } } game: // Подключения необходимых библиотек import javax.swing.*; // Главный класс игры public class game { //private static okno window; private static okno window; // Главный метод, который запускает игру public static void main(String[] args) { // Вызов диалогового окна для ввода сложности игры String rez = JOptionPane.showInputDialog(null,"Введите сложность игры от 1 до 7:","Сложность игры",1); // Помещение результата выбора в переменную целого типа int slogn = rez.charAt(0)-'0'; // Проверка, что введена цифра от 1 до 7 if ((slogn>=1)&&(slogn<=7)) { setWindow(new okno(slogn)); } } public static okno getWindow() { return getWindow(); } public static void setWindow(okno window) { game.window = window; } } pole: import javax.imageio.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.io.*; class pole extends JPanel { private Image shapka; private Image fon; public int x = 400; private int slogn; public int summ=0; private podar[] gamePodar; private podar[] gameBomb; private Image end_game; public Timer timerUpdate,timerDraw; public pole(int slogn) { this.slogn = slogn; try { shapka = ImageIO.read(new File("shapka.png")); } catch(IOException ex) {} try { fon = ImageIO.read(new File("fon.png")); } catch(IOException ex) {} try { end_game = ImageIO.read(new File("end_game.png")); } catch(IOException ex) {} gamePodar = new podar[7]; for (int n=0;n<7;n++) { try { gamePodar[n] = new podar(ImageIO.read(new File("n"+n+".png"))); } catch (IOException ex) {} } gameBomb = new podar[7]; for (int i=0;i<7;i++) { try { gameBomb[i] = new podar(ImageIO.read(new File("d"+i+".png"))); } catch (IOException ex) {} } timerUpdate = new Timer(3000,new ActionListener() { public void actionPerformed(ActionEvent e) { updateStart(); } }); timerUpdate.start(); timerDraw = new Timer(50,new ActionListener() { public void actionPerformed(ActionEvent e) { repaint(); } }); timerDraw.start(); } public void paintComponent(Graphics gr) { super.paintComponent(gr); gr.drawImage(fon, 0, 0, null); gr.drawImage(shapka, x, 465, null); ///!!!!!!!!!!!!!!!!!!!!!!!!!ОТРИСОВКА СЧЕТА ИГРЫ String str=Integer.toString(summ); gr.setFont(new Font("Courier New", Font.ITALIC, 30)); gr.setColor(Color.white); gr.drawString(str, 50, 50); for (int i=0;i<7;i++) { gamePodar[i].draw(gr); if (gamePodar[i].act==true) { if ((gamePodar[i].y+gamePodar[i].img.getHeight(null))>=470) { if (Math.abs(gamePodar[i].x - x) > 75) { gr.drawImage(end_game, 0, 0, null); timerDraw.stop(); timerUpdate.stop(); break; } else { gamePodar[i].act=false; //СЧЕТ summ=summ+1; } } } } //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 for (int i=0;i<7;i++) { gameBomb[i].draw(gr); if (gameBomb[i].act==true) { if ((gamePodar[i].y+gameBomb[i].img.getHeight(null))>=470) { if (Math.abs(gameBomb[i].x - x) < 75) { gr.drawImage(end_game, 0, 0, null); timerDraw.stop(); timerUpdate.stop(); break; } else gameBomb[i].act=false; //СЧЕТ summ=summ+1; } } } } private void updateStart() { int kol=0; for (int i=0;i<7;i++) { if (gamePodar[i].act==false) { if (kol<slogn) { gamePodar[i].start(); gameBomb[i].start(); break; } } else kol++; } } } podar: /* Подключения необходимых библиотек*/ import javax.swing.*; import java.awt.*; import java.awt.event.*; // Класс для подарка, падающего сверху class podar { public Image img; // Изображение подарка public int x,y; // Положение подарка на игровом поле, в пикселях, x - отступ слева, y - отступ сверху public Boolean act; // Переменная логического типа, показывающая активность подарка, есть он игровом поле или нет Timer timerUpdate; // Таймер, отвечающий за движение подарка вниз // Конструктор класса public podar(Image img) { // Создание и настройка таймера, отвечающего за движение подарка вниз timerUpdate = new Timer(150,new ActionListener() { public void actionPerformed(ActionEvent e) { vniz(); // Метод, осуществляющий движение подарка вниз } }); this.img = img; // Передача изображения из круглых скобок Конструктора класса в переменную класса act=false; // Изначально делаем подарок неактивным, отсутствующим на игровом поле } // Метод, выполняющий активизацию подарка на игровом поле, вывод его сверху игрового поля public void start() { timerUpdate.setDelay(100); // Установка временной задержки для таймера timerUpdate.start(); // Запуск таймера y = 0; // Отступ сверху в пикселях x = (int)(Math.random()*700); // Отступ слева в пикселях, получаем случайным образом от 0 до 700 act = true; // } // Метод, осуществляющий движение подарка вниз public void vniz() { if (act==true) // Если подарок активен на игровом поле { y+=9; // Увеличение отступа сверху на 10 пикселей } if ((y+img.getHeight(null))>=470) // Если подарок достиг нижней границы { timerUpdate.stop(); // Остановка таймера } } // Метод, выполянющий отрисовку подарка на игровом поле, если он активен public void draw(Graphics gr) { if (act==true) { gr.drawImage(img,x,y,null); // Рисование изображения } } }
Решение задачи: «Игра начинающего программиста»
textual
Листинг программы
gr.setFont(font);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д