Допомагаємо ЗСУ!

Помогите дописать тетрис в командной строке) с+

🟠 20:37 Загроза ударних БпЛА Загроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • Автор теми Маpио
  • Дата створення

Маpио

М
  • 🟠 20:37 Загроза ударних БпЛА Загроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #1
Помогите дописать тетрис в командной строке) с+

:)

тренируюсь и что то подвис на моменте. По идеи он должен быть легкий но не тудЫ:) Смотрел youtube и что то на меня кликнуло с экрана и появилось жуткое хотенье написать свой тетрис. Не знаю к чему это) Ну вот что есть - то есть!

Нужна функция которая ставит фигуры друг на друга) Можно сделать так функция если фигура добралась до '#' то все элементы стакана становятся '*' Для того что бы потом я мог написать поиск на 4 элемента который будет передавать кординаты на +1 или - 1 переменным что бы фигуры смещать вправо или влево. Эта функция должна иметь условия что бы фигуры не падали в друг дружку)) И были от друг друга полностью не зависимые!

Первая функция в коде это вот это то что и начал писать даже так ее и назвал конверсия) Ну вот что то не идет)

Возможно у вас есть другие предложения с удовольствием выслушаю)

Вот код что есть сейчас оно все работает и запускается можете скомпилить и проверить.

#include <iostream>
#include <windows.h>
#include <locale>
#include <time.h>
#include <conio.h>
using namespace std;

int e = 9;
int a = 10;
int b = 11;
int c = 12;
int d = 13;
int object = 1;
int iteration = 0;
int *ptrIteration = &iteration;
char array[20][20];
int x = 5000, y = 0;
int *ptrX = &x;
int i;
int *ptrI = &i;
int score = 0;

void conversionFigures(){
for(int z = 0; z < 20; z++){
for(int k = 0; k < 20; k++){
if(array[z][k]){

}
}
}
}
void cube(){ // Куб
for(*ptrI = 0; *ptrI < *ptrIteration; i++){
array[*ptrI][a] = '#';
array[*ptrI] = '#';
array[*ptrI + 1][a] = '#';
array[*ptrI + 1] = '#';
if(array[*ptrI][a] && array[*ptrI] && array[*ptrI + 1][a] && array[*ptrI + 1] == '#'){
array[*ptrI - 1][a] = ' ';
array[*ptrI - 1] = ' ';
}
}
}
void curveL(){ // Клюшка Левая
for(*ptrI = 0; *ptrI < *ptrIteration; i++){
array[*ptrI][a] = '#';
array[*ptrI] = '#';
array[*ptrI][c] = '#';
array[*ptrI + 1][a] = '#';
if(array[*ptrI][a] && array[*ptrI] && array[*ptrI][c] && array[*ptrI + 1][a] == '#'){
array[*ptrI - 1][a] = ' ';
array[*ptrI - 1] = ' ';
array[*ptrI - 1][c] = ' ';
}
}
}
void curveR(){ // Клюшка Правая
for(*ptrI = 0; *ptrI < *ptrIteration; i++){
array[*ptrI][a] = '#';
array[*ptrI] = '#';
array[*ptrI][c] = '#';
array[*ptrI + 1][c] = '#';
if(array[*ptrI][a] && array[*ptrI] && array[*ptrI][c] && array[*ptrI + 1][c] == '#'){
array[*ptrI - 1][a] = ' ';
array[*ptrI - 1] = ' ';
array[*ptrI - 1][c] = ' ';
}
}
}
void stick(){ // Палка
for(*ptrI = 0; *ptrI < *ptrIteration; i++){
array[*ptrI][a] = '#';
array[*ptrI] = '#';
array[*ptrI][c] = '#';
array[*ptrI][d] = '#';
if(array[*ptrI][a] && array[*ptrI] && array[*ptrI][c] && array[*ptrI][d] == '#'){
array[*ptrI - 1][a] = ' ';
array[*ptrI - 1] = ' ';
array[*ptrI - 1][c] = ' ';
array[*ptrI - 1][d] = ' ';
}
}
}
void figureL(){ // Фигура Левая
for(*ptrI = 0; *ptrI < *ptrIteration; i++){
array[*ptrI][a] = '#';
array[*ptrI] = '#';
array[*ptrI + 1][e] = '#';
array[*ptrI + 1][a] = '#';
if(array[*ptrI][a] && array[*ptrI] && array[*ptrI + 1][e] && array[*ptrI + 1][a] == '#'){
array[*ptrI - 1][a] = ' ';
array[*ptrI - 1] = ' ';
array[*ptrI][e] = ' ';
}
}
}
void figureR(){ //Фигура правая
for(*ptrI = 0; *ptrI < *ptrIteration; i++){
array[*ptrI][a] = '#';
array[*ptrI] = '#';
array[*ptrI + 1] = '#';
array[*ptrI + 1][c] = '#';
if(array[*ptrI][a] && array[*ptrI] && array[*ptrI + 1] && array[*ptrI + 1][c] == '#'){
array[*ptrI - 1][a] = ' ';
array[*ptrI - 1] = ' ';
array[*ptrI][c] = ' ';
}
}
}
void Figurine(){ // Фигура с носом
for(*ptrI = 0; *ptrI < *ptrIteration; i++){
array[*ptrI][a] = '#';
array[*ptrI] = '#';
array[*ptrI][c] = '#';
array[*ptrI + 1] = '#';
if(array[*ptrI][a] && array[*ptrI] && array[*ptrI][c] && array[*ptrI + 1] == '#'){
array[*ptrI - 1][a] = ' ';
array[*ptrI - 1] = ' ';
array[*ptrI - 1][c] = ' ';
}
}
}
void figures(){
switch(object){
case 1:{
Figurine();
break;
}
case 2:{
figureR();
break;
}
case 3:{
figureL();
break;
}
case 4:{
stick();
break;
}
case 5:{
curveR();
break;
}
case 6:{
curveL();
break;
}
case 7:{
cube();
break;
}
}
}
void keyboard(){
char key=0;
if(kbhit())
{
key=getch();
switch (key)
{
case 75:{

break;
}
case 77:{

break;
}
}
}
}
void map(){
for (int z = 0; z < 20; z++){
for (int k = 0; k < 20; k++){
if((k==0||k==19||k == 19)&&(z!=0||z!=19)){
array[z][k]='*';
}
if(z==19){
array[z][k]='*';
}
}
}
}
void display(){
map();
keyboard();
figures();
for (int z = 0; z < 20; z++){
for (int k = 0; k < 20; k++){
cout << array[z][k];
}
cout << endl;
}
Sleep(*ptrX);
system("CLS");
*ptrIteration +=1; // смещение фигур вниз
if(*ptrIteration == 19){
*ptrIteration = 0;
score++;
if(object == 7){
object = 1;
}
object++;
}
}
int main(){
HWND hwnd;
char Title[1024];
GetConsoleTitle(Title, 1024);
hwnd=FindWindow(NULL, Title);
MoveWindow(hwnd,0,0,196,400,TRUE);
setlocale(LC_ALL, "RUS");
cout << endl;
cout << "Введите сложность:\nот 1 до 50" << endl;
cin >> y;
if(y <= 50){
*ptrX = *ptrX / y;
}
if(y > 50){
cout << "Не верное значение ! " << endl;
exit(0);
}
for(;;){
display();
cout << "Счет: " << score << endl;
}
cin.get();
return 0;
}
 
  • 🟠 20:37 Загроза ударних БпЛА Загроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #2
Эх, ностальгия, консольный тетрис, WinAPI...
Только может не стоило сходу на плюсах тренироваться, а то так недолго до сегфолтов :). Массив, кстати лучше инициализировать сразу, например пробелами, а то там по-умолчанию нули, и в виндовой консоли отображается какая-то хрень.
 
  • 🟠 20:37 Загроза ударних БпЛА Загроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #3
Эх, ностальгия, консольный тетрис, WinAPI...
Только может не стоило сходу на плюсах тренироваться, а то так недолго до сегфолтов :). Массив, кстати лучше инициализировать сразу, например пробелами, а то там по-умолчанию нули, и в виндовой консоли отображается какая-то хрень.

Там все не правильно не стал дорабатывать это чудо. Буду делать все по другому и на ооп.


В командной строке можно все сделать очень красиво задействовать SetConsoleTextAttribute

Так же написать самостоятельно функцию system("CLS") для того что бы не было мерцания экрана.
Задействовать интерфейс создать меню с выбором клавиш или мышки и прочее.

Много есть идей когда то будет время и я это все реализую))

p.s. Я кстати в инете не одного такого не нашел с такой реализацией.
 
  • 🟠 20:37 Загроза ударних БпЛА Загроза БпЛА типу «Шахед»#м_Харків_та_Харківська_територіальна_громада
  • #5

То что в теме это не тетрис а бред. Тетрис он на первый взгляд очень простой. В консольном тетрисе очень много будет багов и все это нужно устранить!

Сейчас особо времени нету отложил мега проект)) Не много позже я продолжу я все таки его напишу :)
 
Назад
Зверху Знизу