powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Движение символа в ограниченном пространстве
25 сообщений из 41, страница 1 из 2
Движение символа в ограниченном пространстве
    #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
Движение символа в ограниченном пространстве
    #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
Движение символа в ограниченном пространстве
    #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
Движение символа в ограниченном пространстве
    #39927903
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fromHtoh,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


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

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


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

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

Начиналось как code-review.
...
Рейтинг: 0 / 0
Движение символа в ограниченном пространстве
    #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
Движение символа в ограниченном пространстве
    #39929797
kolobok0, демагогия вам не поможет
...
Рейтинг: 0 / 0
Движение символа в ограниченном пространстве
    #39929798
mayton
Друзья. Как-же мы так в топике докатились до такого?

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

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

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

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

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

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

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

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


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