Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Движение символа в ограниченном пространстве / 25 сообщений из 41, страница 1 из 2
18.02.2020, 10:40
    #39927817
fromHtoh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Здравствуйте, приспичило написать что то типа мини игры по движению в пространстве, с очками,случайно появляющимися. Пока что вроде написал только движение, и то, есть некоторые проблемы, которые я заметил, но пока не решил. Суть в том, что за последнее время я посмотрел несколько роликов о создании игр на c++, где движение, и даже в 3d пространстве умещается в 200 строках. Так вот,стоит ли мне продолжать писать на основе начатого или переписать?
код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
#test
#include <iostream>
#include <string>
#include <stdlib.h>
#include <conio.h>
using namespace std;
char point;
int y = 0;
int code;
int alpha = 0;
int d = 20;
int ab;
int heightplayer = 0;
int aboutheight = 5;
void aftermath() {
	cout << ("|");
	for (int n = 0; n < d; n++) {
		cout << (" ");
	}
	cout << ("I");
	cout << ("|") << endl;
}
void enderyeleven() {
	ab = d;
	cout << ("|");
	for (int c = 0; c <= ab; c++) {
		cout << " ";
	}
	cout << ("|") << endl;
}
void lowmaker() {
	int lowheight = aboutheight - heightplayer;
	for (int abc = 0; abc < lowheight; abc++) {
		enderyeleven();
	}
}
void downmaker() {
	int heightbefore;
	for (heightbefore = 0; heightbefore < heightplayer; heightbefore++) {
		enderyeleven();
	}
}
void forwardmovement() {
	if (y >= 0) {
		y++;
		int a = 0;
		do {
			cout << " ";
			a++;
		} while (a < y);
		alpha = 1;
	}
}
void ender() {
	d = d--;
	ab = d - y;
	for (int c = 0; c <= ab; c++) {
		cout << " ";
	}cout << ("|") << endl;
}
void endernot() {
	d = 20;
	ab = d - y;
}
void backmovement() {
	if (point == 'a') {
		if (y > 0) {
			y--;
			if (y > 0) {
				int b = 0;
				do {

					cout << " ";
					b++;
				} while (b < y);


			}

		}
	}
	alpha = 0;
}
void movement() {

	int heightall = 5;
	point = _getch();
	switch (point) {
	case 'd': {
		forwardmovement();
		break;
	}
	case 'a': {
		backmovement();
		break;
	}
	case 's': {
		if (heightplayer < 5) {
			heightplayer++;
			system("cls");
		}
		else {
			heightplayer = heightall;
			system("cls");
		}
		break;
	}
	case 'w': {
		heightplayer--;
		system("cls");
		break;
	}
	}
}
void forwardbadcut() {
	if (y < d) {
		int k = 0;
		cout << ("|");
		do {
			cout << " ";
			k++;
		} while (k < y);
		cout << "I";
	}
}
void backwardbadcut() {
	cout << ("|");
	if (y > 0) {
		if (y > 0) {
			int b = 0;
			do {

				cout << " ";
				b++;
			} while (b < y);
			cout << "I";
		}
		else {
			cout << ("I");
		}
	}
	else {
		cout << "I";
	}
}
int main() {
	bool gamecondition = true;
	if (gamecondition == true) {
		int heightall = 5;
		system("cls");
		cout << ("|") << ("I");
		for (int g = 0; g < d; g++) {
			cout << (" ");
		}
		cout << ("|") << endl;
		lowmaker();
		cout << ("Y is ") << (y) << endl;
		cout << ("ab is ") << (ab) << endl;
		cout << ("Actual height is ") << (heightplayer) << endl;
		cout << ("Your input is ");
		downmaker();
		do {
			if (heightplayer <= heightall) {
				if (heightplayer >= 0) {
					if (y <= d) {
						movement();
						system("cls");
						downmaker();
						if (y < d) {
							switch (alpha) {
							case 1: {
								forwardbadcut();
								ender();
								break; }
							case 0: {
								backwardbadcut();
								ender();
								break; }
							}
							endernot();
							lowmaker();
							cout << ("Y is ") << (y) << endl;
							cout << ("ab is ") << (ab) << endl;
							cout << ("Actual height is ") << (heightplayer) << endl;
							cout << ("Your inputT:");
						}
					}
					if (y >= d) {
						switch (y) {
						case 20: {
							cout << ("|");
							for (int n = 0; n < d; n++) {
								cout << (" ");
							}
							cout << ("I");
							cout << ("|") << endl;
							endernot();
							lowmaker();
							cout << ("Y is ") << (y) << endl;
							cout << ("ab is ") << (ab) << endl;
							cout << ("Actual height is ") << (heightplayer) << endl;
							cout << ("Your inputT:");

							break;
						}
						case 21: {
							aftermath();
							lowmaker();
							cout << ("Y is ") << (y) << endl;
							cout << ("ab is ") << (ab) << endl;
							cout << ("Actual height is ") << (heightplayer) << endl;
							cout << ("Your inputT:");

							y--;
							break;
						}
						}

					}
				}
				if (heightplayer < 0) {
					heightplayer = 0;
				}
			}
		} while (gamecondition == true);
		return 0;
	}
}
...
Рейтинг: 0 / 0
18.02.2020, 12:08
    #39927892
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
fromHtoh,

Переписать конечно. Код ужасен.
Совет: каждый раз когда делаешь ctrl+c, ctrl+v бей себя током или я не знаю.

Код: plaintext
1.
2.
3.
4.
do {
			cout << " ";
			a++;
		} while (a < y);


Из этого сделать функцию, которая выводит в cout n пробелов.

Код: plaintext
1.
2.
3.
4.
		cout << ("Y is ") << (y) << endl;
		cout << ("ab is ") << (ab) << endl;
		cout << ("Actual height is ") << (heightplayer) << endl;
		cout << ("Your input is ");


И это тоже надо завернуть куда-нибудь.
Код: plaintext
1.
2.
int d = 20;
int ab;


Названия не говорят ни о чём. Даже в однострочной функции не всегда стоит использовать однобуквенную переменную.

Код: plaintext
1.
system("cls");


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

Всё работает через глобальные переменные, и это - ужасно.

Код: plaintext
1.
2.
void backmovement() {
	if (point == 'a') {


Это условие не нужно, backmovement вызывается только если point == 'a'

Код: plaintext
1.
2.
3.
	
        bool gamecondition = true;
	if (gamecondition == true)


Это тоже не нужно.
Писать для bool == true в условии тоже нужно.
Код: plaintext
1.
if (gamecondition) { ... }
...
Рейтинг: 0 / 0
18.02.2020, 12:15
    #39927896
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
fromHtoh,

А сейчас учу плохому. Циклы, где счётчик не нужен можно писать не так:
Код: plaintext
1.
for (int i = 0; i < cnt; i++)


а так:
Код: plaintext
1.
for (int i = сnt; i--;)


или так, если надо на один проход меньше.
Код: plaintext
1.
for (int i = сnt; --i;)



Естественно, не должно быть никакой возможности получить cnt <= 0
...
Рейтинг: 0 / 0
18.02.2020, 12:24
    #39927903
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
fromHtoh,

Вообще делай в лучших традициях MVC отдельно управление, отдельно схему данных, отдельно отрисовку.
Ну и ты перерисовываешь каждый раз всё заново, можно попытаться что-нибудь вымутить с вендовым терминалом, чтобы перерисовывать только то, что изменилось. Или посмотреть в сторону https://pdcurses.org/
...
Рейтинг: 0 / 0
18.02.2020, 12:42
    #39927907
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Так вот,стоит ли мне продолжать писать на основе начатого или переписать?
В топике не обозначена цель. Если цель - писать в 200 строк - то это одно.
Написать игру - это другое. Написать и продать игру это вообще третье.

А так... звучит вроде как "ребя я вот думаю мне развестись со старой женой и жениться или так побыть" ?
...
Рейтинг: 0 / 0
18.02.2020, 12:54
    #39927915
crutchmaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
mayton,

Он нарывается на ревью кода, просто не знает, как это называется.
...
Рейтинг: 0 / 0
18.02.2020, 13:52
    #39927956
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Я уже писал где-то что стыдно постить в С++ даже не прогнав CPP-check и бесплатный Sonar.

Самое смешное что тривиальные дефекты 80% подсвечиваются уже на этой фазе.
...
Рейтинг: 0 / 0
18.02.2020, 14:13
    #39927971
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Не по code-style а по смыслу.

Код не тестабельный. Он представляет собой длинную колбасу state-full методов которые влияют на глобалные
переменные.

Если автор взял С++ то имеет смысл создать сущность Game, или GameLocation и ее запускать в разных
экземплярах и разных условиях для создания условий тестирования. Все глобальные переменные - оформить
как свойства класса для изоляции.

Если автор вообще не хочет ООП - тогда имеет смысл писать просто в языке "C". Это просто откроет
больше возможностей портирования на разное железо. Можно будет запускать на микро-контроллерах.
...
Рейтинг: 0 / 0
18.02.2020, 14:38
    #39927985
Движение символа в ограниченном пространстве
mayton
Если автор вообще не хочет ООП - тогда имеет смысл писать просто в языке "C".

C++ сопровождать проще
он не только для ООП
...
Рейтинг: 0 / 0
18.02.2020, 21:07
    #39928186
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Алексей Роза
mayton
Если автор вообще не хочет ООП - тогда имеет смысл писать просто в языке "C".

C++ сопровождать проще
он не только для ООП

Ты специально зарегался чтоб это сказать?

P.S. Ну кому проще а кому и трабл-шутить сложнее.
...
Рейтинг: 0 / 0
18.02.2020, 23:30
    #39928228
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
mayton
Я уже писал где-то что стыдно постить в С++ даже не прогнав CPP-check и бесплатный Sonar.
А есть бесплатный Sonarqube для C++? Ссылочкой не поделитесь?
...
Рейтинг: 0 / 0
19.02.2020, 09:21
    #39928284
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Попробуйте стандартный SonarQube и бесплатный плагин для c++.
...
Рейтинг: 0 / 0
22.02.2020, 03:25
    #39929701
Движение символа в ограниченном пространстве
mayton
Алексей Роза
пропущено...

C++ сопровождать проще
он не только для ООП

Ты специально зарегался чтоб это сказать?

P.S. Ну кому проще а кому и трабл-шутить сложнее.

предлагаю продолжить здесь
...
Рейтинг: 0 / 0
22.02.2020, 13:45
    #39929749
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Алексей Роза
...C++ сопровождать проще...он не только для ООП


о блин... как мозх Ваш работает... прям задом наперёд...
давайте с азов...
1) ООА и ООП - это единственная технология описывающая и позволяющая перейти от бизнес идеи к коду.
2) Анализ и Проектирование, о чём пишет (сокращение выше) это ДО выбора языка.
3) Правильно декомпозированная бизнес задача является статикой на всём протяжении жизни проекта.
4) На любом языке (в том числе и c++) можно изобразить такое, и достаточно компактно, что тяжело будет не только сапортить или переделывать но и тупо понять что хотелось изначально...
5) Можно писать и для микроконтроллеров и на азме в стиле ОО подхода. А можно на яве или там си бимоле в стиле азма... Второе - встречается практически в 99% проектах и фирмах...


как то так
(круглый)
...
Рейтинг: 0 / 0
22.02.2020, 15:10
    #39929765
Движение символа в ограниченном пространстве
а ещё можно микроскопом гвозди забивать и на боенге возить собачек корги, но лучше тяжёлые психо-формы оставить соответствующим органам.
Можно испоганить любое начинания, если ты не умеешь код организовывать.
Зато вот если умеешь, то даже 1'000'000 строк кода тебя не убьют.
kolobok0
1) ООА и ООП - это единственная технология описывающая и позволяющая перейти от бизнес идеи к коду.

машину можно построить и на неймспейсах + функции
но это и в C можно.
а вот чего в C нельзя исписано 19 страниц по ссылке выше...
вкраце: сопровождать проще C++, потому что множество удобных нововведений едут именно туда.
в C синтаксис максимально простой, без излишеств. Кому-то и такое заходит...
но там же даже нет защиты от nullptr!
...
Рейтинг: 0 / 0
22.02.2020, 16:26
    #39929779
kolobok0
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Алексей Роза
...
машину можно построить и на неймспейсах + функции но это и в C можно....


ышо раз...
ОбъектноОриентированныйАнализ и ОбъектноОриентированноеПроектирование
к языку никакого отношения не имеют . От слова совсем...

(круглый)
ЗЫ
И это единственная технология описывает стэп бай стэп как перейти от бизнес задачи в жизни к математическому виртуальному миру программирования...в этом его сила ...
А вот выбор языка вторичен.
ЗЫ ЗЫ
Да, не знаю как Вас ..а вот меня окружает 3D объектный мир по жизни если что...
...
Рейтинг: 0 / 0
22.02.2020, 16:35
    #39929782
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Друзья. Как-же мы так в топике докатились до такого?

Начиналось как code-review.
...
Рейтинг: 0 / 0
22.02.2020, 16:39
    #39929783
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
Код: plaintext
1.
2.
3.
Checking hello.cpp ...
[hello.cpp:148]: (style) Condition 'gamecondition==true' is always true
[hello.cpp:86]: (style) The scope of the variable 'heightall' can be reduced.
...
Рейтинг: 0 / 0
22.02.2020, 18:07
    #39929797
Движение символа в ограниченном пространстве
kolobok0, демагогия вам не поможет
...
Рейтинг: 0 / 0
22.02.2020, 18:10
    #39929798
Движение символа в ограниченном пространстве
mayton
Друзья. Как-же мы так в топике докатились до такого?

Начиналось как code-review.

даже не знаю, что там ещё можно жевать... всё уже пережёвано 1000 раз
YouTube Video
...
Рейтинг: 0 / 0
27.02.2020, 13:14
    #39931655
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
fromHtoh
что то типа мини игры
Насколько знаю, написание игор влечёт самое большое использование ООП на квадратный метр кода.
...
Рейтинг: 0 / 0
27.02.2020, 13:19
    #39931659
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
CEMb
fromHtoh
что то типа мини игры
Насколько знаю, написание игор влечёт самое большое использование ООП на квадратный метр кода.

Лучшие образцы игр 20-го века (Super-Mario, Mortal-Combat, Doom) были написаны вообще без ООП.
...
Рейтинг: 0 / 0
27.02.2020, 13:32
    #39931671
CEMb
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
mayton
Лучшие образцы игр 20-го века (Super-Mario, Mortal-Combat, Doom) были написаны вообще без ООП.
Имелось ввиду, что в играх обычно много сущностей, которые хорошо ложатся на ООП. Когда Mortal/Doom/Mario писали, ООП ещё толком не было, поэтому они его не использовали не из вредности, а от безысходности, насколько понимаю.

Ну вот сейчас, глядя на всё это с длинноты своих лет, на чём лучше писать игры? На С или на С++? Понятно, что на C++17, потому что он избавляет от множества работы и ошибок. Дальше будет ещё лучше.
...
Рейтинг: 0 / 0
27.02.2020, 13:43
    #39931682
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Движение символа в ограниченном пространстве
CEMb
mayton
Лучшие образцы игр 20-го века (Super-Mario, Mortal-Combat, Doom) были написаны вообще без ООП.
Имелось ввиду, что в играх обычно много сущностей, которые хорошо ложатся на ООП. Когда Mortal/Doom/Mario писали, ООП ещё толком не было, поэтому они его не использовали не из вредности, а от безысходности, насколько понимаю.

Ну вот сейчас, глядя на всё это с длинноты своих лет, на чём лучше писать игры? На С или на С++? Понятно, что на C++17, потому что он избавляет от множества работы и ошибок. Дальше будет ещё лучше.

Почему-же С++ уже был тогда. Просто для мира игровых приставок и всяких Atari Commodore например
портабельность была гораздо важнее чем некие удобства работы девелопера.

А "C" можно было найти под любую кофеварку и пересобрать игру без проблем.
...
Рейтинг: 0 / 0
27.02.2020, 13:45
    #39931686
Движение символа в ограниченном пространстве
CEMb
fromHtoh
что то типа мини игры
Насколько знаю, написание игор влечёт самое большое использование ООП на квадратный метр кода.

не-а, DOD (Data-Oriented Design)
в 6+ раз быстрее ООП (как раз в играх максимальный прирост из-за повторения практически одного и того же 60 раз в секунду)
YouTube Video
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Движение символа в ограниченном пространстве / 25 сообщений из 41, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]