Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/64: Рейтинг темы: голосов - 64, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 36

Очень простая консольная игрушка

17.09.2013, 16:41. Показов 12632. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! У меня довольно интересная проблема. Очень прошу ответить наиболее подробно, так как Java пока что только изучаю. Я понимаю, что почти ни кому не интересно смотреть такие длинные темы, но очень прошу помочь, так как эта тема также может помочь и другим.

Суть:

Хочу создать простенькую игрушку в консоли, где цифра 1 - корабль игрока, а 2 - враги. И каждые полсекунды из 1 вылетает 8 вверх, и, при попадании в 2 - уничтожает его.

На взгляд легко (мне так тоже казалось). А вот на деле попалась Большая проблема.

Пока что игра состоит из 3 файлов:

Start (заставляет работать метод generation в MapGen)

MapGen (создает двумерный массив point (аналог x и y) и собственно генерирует и прорисовывает карту 20 на 20)

Ship (собственно корабль персонажа - та самая единичка)

Вот код:

Start

Java
1
2
3
4
5
6
7
8
9
10
11
import ru.cmdwarrior.src.MapGen;
 
public class Start
{
 
    public static void main(String[] args)
    {
        MapGen.generation();
    }
 
}
MapGen

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package ru.cmdwarrior.src;
 
public class MapGen
{
    public static int[][] point = new int [20][20];
        
    public static void generation()
    {
        for(int i=0;i<point.length;i++)
        {
            for(int j=0;j<point.length;j++)
            {
                point[i][j] = 0;
                System.out.print(point[i][j]);
            }
            System.out.println();
        }       
        
        Ship.spawn(0,0);
    }
    
    
    
}
Ship

Java
1
2
3
4
5
6
7
8
9
10
11
12
package ru.cmdwarrior.src;
import static ru.cmdwarrior.src.MapGen.point;
public class Ship
{
    public static int health = 100;
    public static int armor = 100;
    
    public static void spawn(int x, int y)
    {
        point[x][y] = 1;
    }
}
До этого момента все шло отлично. Но дальше для меня пошла нерешаемая проблема. Как вы можете видеть, цикл генерации прорабатывается один раз. Спавн корабля по координатам 0,0 происходит, но не отображается в консоли, так как карта сгенерированна!

Это значит, нужно как-то создать RenderMap, который будет отчищать сгенерированную мапу и применять и отображать изменения.



Создал проверку. Если в точке 0,0 находится единичка (то есть корабль игрока), то вывести SPAWN! Вывелось, значит корабль есть, а на карте отобразить не знаю как.

Вот тут и вся загвоздка - создавать новый поток или можно не так далеко уходя? Очень прошу дать развернутый ответ...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.09.2013, 16:41
Ответы с готовыми решениями:

Консольная Java-игрушка
Есть задание. Написать программу &quot;Гладиаторские бои&quot;. Кто может бесплатно помочь, отпишитесь.Хотя...

Простая игрушка на Swing
Добрый день. Изучил более-менее как делать оконные графические приложения. Хочу ради интереса...

Groovy Игрушка "puzzle" - логика работает, а изображение не меняется
//puzzle.groovy package groovy import groovy.swing.SwingBuilder import javax.swing.* import...

5
 Аватар для Артур Аралин
45 / 11 / 8
Регистрация: 21.05.2012
Сообщений: 132
Записей в блоге: 2
17.09.2013, 17:06
Юзай двумерный массив)
0
 Аватар для lowercase
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
17.09.2013, 17:27
Цитата Сообщение от CMTV Посмотреть сообщение
Это значит, нужно как-то создать RenderMap, который будет отчищать сгенерированную мапу и применять и отображать изменения.
вы на верном пути. дерзайте. обычно, сначала все "рисуется" в буфер содержимое которого потом "сбрасывается" на экран.

Цитата Сообщение от CMTV Посмотреть сообщение
Но дальше для меня пошла нерешаемая проблема
в программировании нету нерешаемых задач

Немножко замечаний покоду

так не хорошо делать:
Java
1
2
3
4
5
for(int i=0;i<point.length;i++) {
   for(int j=0;j<point.length;j++) { 
      // ... 
   }
}
всегда пишите так:
Java
1
2
3
4
5
for(int i=0;i<point.length;i++) {
   for(int j=0;j<point[i].length;j++) { // point[i].length, а не point.length
       // ... 
   }
}
все таки point это масив масивов, то есть point[i] - это тоже массив, который имеет свою собственную размерность. это очень важно.

static, static, static... накой тогда в java ооп вообще?
0
 Аватар для Артур Аралин
45 / 11 / 8
Регистрация: 21.05.2012
Сообщений: 132
Записей в блоге: 2
17.09.2013, 17:30
Сделай цикл сколько нужно вывести кораблей например 5 и генерируй случайные числа

Java
1
2
3
4
5
6
7
8
9
10
11
12
int i = 0;//Счетчик
int a;
int b;
Random r = new Random();//Объект рандомной генерации 
while(i <= 5){
a = r.nextInt(10);
b = r.nextInt(10);
//Нужно будет сделать get метод получения массива для сверки с ним
if(getPoint(a,b)!=1){
Ship.spawn(a,b);
}
}
0
 Аватар для lowercase
213 / 202 / 85
Регистрация: 09.05.2012
Сообщений: 494
17.09.2013, 18:14
Цитата Сообщение от CMTV Посмотреть сообщение
Вот тут и вся загвоздка - создавать новый поток или можно не так далеко уходя? Очень прошу дать развернутый ответ...
можно и в один поток. типичный каркас выглядит примерно так:
Java
1
2
3
4
5
6
7
8
9
10
class Game {
   private boolean running = true;
   public void run() {
      initialize();
      while(running){ 
         update();
         render(); 
      }
   }
}
в методе update() должны изменятся парметры в соответствии с логикой работы вашей игры. render же на основе этих параметров должен строить картинку. по сути ваша игра это очень сложная функция от времени да, кстати в метод update обычно передают параметр - количество времени в милисекундах продшее с последнего вызова метода update();
что касается многопоточности, то тут нужно будет проводить синхронизацию для того чтение данных пользователя не было в перемешку с выводом. скорее всего эта проблема решится с помощью синхронизации потоков.

в вобщем если вдаватся в подробности то тут можно загрзнуть на несколько месяцев. ибо реализация игрового движока - это не дважды два. это довольно сложная работа.

Добавлено через 42 минуты
не сочтите демотивацией, но геймдев - это не то, с чего следует начинать учится программировать, поверте. в свое время тоже горел таким желанием, ни к чему хорошему это не привело.
если хотите делать игру, то делайте что-то попроще. вы только начинаете программировать, а уже одной ногой в многопоточность залезли - нехорошо так
предлагаю сделать вам пошаговую игру. в консоли - это то, что нужно: запросили новые данных у игрока, провели изменения в параметрах и вывели на екран текущее состояние(напр. та же карта кораблей), потом снова запросили, снова изменили что-то и снова вывели. то есть типичный интерактив в консоли. вот пример какой-то RPG текствой(к сожалению не вникал в смысл). хотя думаю ничего нового там вы не увидете.
а вот когда уже изучете раздел "Потоки вычислений" в вашей настольной книге(сильно надеюсь что она у вас есть ), тогда уж можно и прикрутить многопточность к вашей игре..
0
0 / 0 / 0
Регистрация: 04.07.2013
Сообщений: 36
17.09.2013, 18:30  [ТС]
Спасибо за советы. По поводу игр, я думаю вы правы. Сделаю что нибудь пошаговое)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.09.2013, 18:30
Помогаю со студенческими работами здесь

Консольная программа
еще раз всем привет. есть некая java консольная программа, которая получает данные из некоторого...

Консольная компиляция JAR
Добрый день, подскажите плииз! Пытаюсь научиться компилировать простые консольные утилиты без...

Консольная игра на Java SE
Какие игры можно сделать на Java в консоле.

Консольная игра пятнышки
Ребят переустановил винду, нету времени качать всё для Java Хотел прогнать один код через онлайн...

Консольная прога в Java выдаёт ошибку
У меня консольная прога выдаёт ошибку. Установил JDK 8. Составил простую прогу class FirstSoft...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru