Игра начинающего программиста - 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);