Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Движение символа в ограниченном пространстве  [new]
fromHtoh
Member

Откуда:
Сообщений: 1
Здравствуйте, приспичило написать что то типа мини игры по движению в пространстве, с очками,случайно появляющимися. Пока что вроде написал только движение, и то, есть некоторые проблемы, которые я заметил, но пока не решил. Суть в том, что за последнее время я посмотрел несколько роликов о создании игр на c++, где движение, и даже в 3d пространстве умещается в 200 строках. Так вот,стоит ли мне продолжать писать на основе начатого или переписать?
код:
#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;
	}
}
18 фев 20, 10:40    [22081940]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1066
fromHtoh,

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

do {
			cout << " ";
			a++;
		} while (a < y);

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

		cout << ("Y is ") << (y) << endl;
		cout << ("ab is ") << (ab) << endl;
		cout << ("Actual height is ") << (heightplayer) << endl;
		cout << ("Your input is ");

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

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

system("cls");

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

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

void backmovement() {
	if (point == 'a') {

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

	
        bool gamecondition = true;
	if (gamecondition == true)

Это тоже не нужно.
Писать для bool == true в условии тоже нужно.
if (gamecondition) { ... }
18 фев 20, 12:08    [22082052]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1066
fromHtoh,

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

а так:
for (int i = сnt; i--;)

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


Естественно, не должно быть никакой возможности получить cnt <= 0

Сообщение было отредактировано: 18 фев 20, 12:18
18 фев 20, 12:15    [22082061]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1066
fromHtoh,

Вообще делай в лучших традициях MVC отдельно управление, отдельно схему данных, отдельно отрисовку.
Ну и ты перерисовываешь каждый раз всё заново, можно попытаться что-нибудь вымутить с вендовым терминалом, чтобы перерисовывать только то, что изменилось. Или посмотреть в сторону https://pdcurses.org/

Сообщение было отредактировано: 18 фев 20, 12:25
18 фев 20, 12:24    [22082072]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
Так вот,стоит ли мне продолжать писать на основе начатого или переписать?

В топике не обозначена цель. Если цель - писать в 200 строк - то это одно.
Написать игру - это другое. Написать и продать игру это вообще третье.

А так... звучит вроде как "ребя я вот думаю мне развестись со старой женой и жениться или так побыть" ?
18 фев 20, 12:42    [22082086]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
crutchmaster
Member

Откуда: оттуда.
Сообщений: 1066
mayton,

Он нарывается на ревью кода, просто не знает, как это называется.
18 фев 20, 12:54    [22082103]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
Я уже писал где-то что стыдно постить в С++ даже не прогнав CPP-check и бесплатный Sonar.

Самое смешное что тривиальные дефекты 80% подсвечиваются уже на этой фазе.
18 фев 20, 13:52    [22082172]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
Не по code-style а по смыслу.

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

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

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

Сообщение было отредактировано: 18 фев 20, 14:14
18 фев 20, 14:13    [22082193]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
Алексей Роза
Member

Откуда: РФ
Сообщений: 144
mayton
Если автор вообще не хочет ООП - тогда имеет смысл писать просто в языке "C".

C++ сопровождать проще
он не только для ООП
18 фев 20, 14:38    [22082218]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
Алексей Роза
mayton
Если автор вообще не хочет ООП - тогда имеет смысл писать просто в языке "C".

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

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

P.S. Ну кому проще а кому и трабл-шутить сложнее.
18 фев 20, 21:07    [22082554]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
bk0010
Member

Откуда:
Сообщений: 4935
mayton
Я уже писал где-то что стыдно постить в С++ даже не прогнав CPP-check и бесплатный Sonar.
А есть бесплатный Sonarqube для C++? Ссылочкой не поделитесь?
18 фев 20, 23:30    [22082636]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
Попробуйте стандартный SonarQube и бесплатный плагин для c++.
19 фев 20, 09:21    [22082742]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
Алексей Роза
Member

Откуда: РФ
Сообщений: 144
mayton
Алексей Роза
пропущено...

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

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

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

предлагаю продолжить здесь
22 фев 20, 03:25    [22085001]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
kolobok0
Member

Откуда:
Сообщений: 2104
Алексей Роза
...C++ сопровождать проще...он не только для ООП


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


как то так
(круглый)
22 фев 20, 13:45    [22085082]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
Алексей Роза
Member

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

машину можно построить и на неймспейсах + функции
но это и в C можно.
а вот чего в C нельзя исписано 19 страниц по ссылке выше...
вкраце: сопровождать проще C++, потому что множество удобных нововведений едут именно туда.
в C синтаксис максимально простой, без излишеств. Кому-то и такое заходит...
но там же даже нет защиты от nullptr!

Сообщение было отредактировано: 22 фев 20, 15:11
22 фев 20, 15:10    [22085103]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
kolobok0
Member

Откуда:
Сообщений: 2104
Алексей Роза
...
машину можно построить и на неймспейсах + функции но это и в C можно....


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

(круглый)
ЗЫ
И это единственная технология описывает стэп бай стэп как перейти от бизнес задачи в жизни к математическому виртуальному миру программирования...в этом его сила ...
А вот выбор языка вторичен.
ЗЫ ЗЫ
Да, не знаю как Вас ..а вот меня окружает 3D объектный мир по жизни если что...

Сообщение было отредактировано: 22 фев 20, 16:30
22 фев 20, 16:26    [22085117]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
Друзья. Как-же мы так в топике докатились до такого?

Начиналось как code-review.
22 фев 20, 16:35    [22085120]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
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.
22 фев 20, 16:39    [22085122]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
Алексей Роза
Member

Откуда: РФ
Сообщений: 144
kolobok0, демагогия вам не поможет
22 фев 20, 18:07    [22085147]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
Алексей Роза
Member

Откуда: РФ
Сообщений: 144
mayton
Друзья. Как-же мы так в топике докатились до такого?

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

даже не знаю, что там ещё можно жевать... всё уже пережёвано 1000 раз

22 фев 20, 18:10    [22085148]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
CEMb
Member

Откуда: Столько
Сообщений: 1994
fromHtoh
что то типа мини игры
Насколько знаю, написание игор влечёт самое большое использование ООП на квадратный метр кода.
27 фев 20, 13:14    [22088194]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

Откуда: loopback
Сообщений: 46320
CEMb
fromHtoh
что то типа мини игры
Насколько знаю, написание игор влечёт самое большое использование ООП на квадратный метр кода.

Лучшие образцы игр 20-го века (Super-Mario, Mortal-Combat, Doom) были написаны вообще без ООП.
27 фев 20, 13:19    [22088200]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
CEMb
Member

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

Ну вот сейчас, глядя на всё это с длинноты своих лет, на чём лучше писать игры? На С или на С++? Понятно, что на C++17, потому что он избавляет от множества работы и ошибок. Дальше будет ещё лучше.
27 фев 20, 13:32    [22088219]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
mayton
Member

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

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

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

А "C" можно было найти под любую кофеварку и пересобрать игру без проблем.
27 фев 20, 13:43    [22088234]     Ответить | Цитировать Сообщить модератору
 Re: Движение символа в ограниченном пространстве  [new]
Алексей Роза
Member

Откуда: РФ
Сообщений: 144
CEMb
fromHtoh
что то типа мини игры
Насколько знаю, написание игор влечёт самое большое использование ООП на квадратный метр кода.

не-а, DOD (Data-Oriented Design)
в 6+ раз быстрее ООП (как раз в играх максимальный прирост из-за повторения практически одного и того же 60 раз в секунду)


Сообщение было отредактировано: 27 фев 20, 13:45
27 фев 20, 13:45    [22088240]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / C++ Ответить