Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Написал свою первую игру месяца 2 назад. Добавил массивы недавно. Теперь не работает (https://forum.antichat.xyz/showthread.php?t=58911)

Metall 16.01.2008 23:29

Написал свою первую игру месяца 2 назад. Добавил массивы недавно. Теперь не работает
 
Я недавно изучил массивы в Си++ (IDE - Turbo c++). Решил переделать свою игру, которую раньше написал без них. Переделал. Теперь игра работает не так, как надо.
Суть игры:
Подобрать смайликом все 5 бонусов.
После переделки программы не выводятся бонусы. Игра работает в текстовом режыме.

Код:

#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <dos.h>
void main()
{
  clrscr();
  randomize();
  int i=0; //в этой переменной хранится кол-во подобраных бонусов
  int bonus1=0,bonus2=0,bonus3=0,bonus4=0,bonus5=0;  //заготовка переменных, для того, чтобы нелзя было подобрать много раз один и тот же бонус

  int bonus_x [4]; //массивы с кординатами вывода бонусов
  int bonus_y [4];

      for (int k=0,l=0;k==5;k++,l++) { //заполнение массива числами
      bonus_x[k]=random(75);
      bonus_y[l]=random(25);
      }

      for (k=0,l=0;k==4;k++,l++) {      //вывод бонусов (не работает)
      gotoxy (bonus_x [k],bonus_y [l]);
      textcolor (6);
      cprintf ("@");
      }
//------------------------------------------------------
      int x=1,y=1;
      gotoxy(x,y);
      textcolor(6);
      cprintf(":)");
//------------------------------------------------------
      for (;i<5;) { //цикл для увеличения счетчика при подборе бонуса
      gotoxy(74,1);
      textcolor(9);
      cout<<"<< "<<i<<" >>"<<endl;

      if (bonus1!=1) {                      //если bonus1 не равен единице, то
          if (x==bonus_x[0] && y==bonus_y[0]) {  //если координаты смайлика совпали с координатвми бонуса
          i++;                                  //прибавить к счетчику единицу
          bonus1=1;                              //приведенный левее код написае для того, чтобы один и тотже бонус нельзя было подбирать несколько раз. теперь bonus1 равен единице
          }
      }
      if (bonus2!=1) {
          if (x==bonus_x[1] && y==bonus_y[1]) {
          i++;
          bonus1=1;
          }
      }
  if (bonus3!=1) {
      if (x==bonus_x[2] && y==bonus_x[2]) {
      i++;
      bonus3=1;
      }
  }
  if (bonus4!=1) {
      if (x==bonus_x[3] && y==bonus_y[3]) {
      i++;
      bonus4=1;
      }
  }
  if (bonus5!=1) {
      if (x==bonus_x[4] && y==bonus_x[4]) {
      i++;
      bonus5=1;
      }
  }
//------------------------------------------------------
  getch();          //управление смайликом с помощью клавиш

    switch (getch()) {
    case 72: {
                if (y==1){
                cout<<"\a\n";    //при столкновении с стенкой слышытся писк динамика
                break;
                }
          gotoxy(x,y);
          textcolor(0);
    cprintf(":)");
          textcolor(6);
          gotoxy(x,y=y-1);
          cprintf(":)");
          break;
    }

    case 75: {
          if (x==1) {
          cout<<"\a\n";  //при столкновении с стенкой слышытся писк динамика
          break;
          }
    gotoxy(x,y);
          textcolor(0);
          cprintf(":)");
    gotoxy(x=x-1,y);
          textcolor(6);
          cprintf(":)");
          break;
    }

    case 77: {
          if (x==79) {
          cout<<"\a\n";  //при столкновении с стенкой слышытся писк динамика
          break;
          }
          gotoxy(x,y);
          textcolor(0);
          cprintf(":)");
    gotoxy(x=x+1,y);
          textcolor(6);
          cprintf(":)");
          break;
    }

    case 80: {
                if (y==25){
          cout<<"\a\n";        //при столкновении с стенкой слышытся писк динамика
                break;
                }
          gotoxy(x,y);
          textcolor(0);
    cprintf(":)");
          gotoxy(x,y=y+1);
    textcolor(6);
          cprintf(":)");
          break;
          }
    }
 }
//------------------------------------------------------
  gotoxy(74,1);  //Вывод счетчика подобраных бонусов
  textcolor(9);
  cout<<"<< "<<i<<" >>"<<endl;
//------------------------------------------------------
  gotoxy(x,y);  //вывод смайлика
  textcolor(1);
  cprintf(":)");
//------------------------------------------------------
  gotoxy(x,y-1);  //это появится вокруг смайлика
  textcolor(1);
  cprintf("||");
  gotoxy(x,y+1);
  textcolor(1);
  cprintf("||");
  gotoxy(x-2,y);
  textcolor(1);
  cprintf("==");
  gotoxy(x+2,y);
  textcolor(1);
  cprintf("==");
//------------------------------------------------------
  for (int q=34,w=1; w<26;w++) {  //вывод бегущей строки
  gotoxy(q,w-1);
  textcolor (0);
  cprintf("ВЫ ВЫИГРАЛИ!");
  gotoxy(q,w);
  textcolor(6);
  cprintf("ВЫ ВЫИГРАЛИ!");
  gotoxy(q,w);
  delay (145);
  }
  textcolor(0);
  cprintf("ВЫ ВЫИГРАЛИ!");
}


razzzar 17.01.2008 00:25

for (int k=0;k==5;k++){ //заполнение массива числами
bonus_x[k]=random(75);
bonus_y[l]=random(25);
}
надо так:
for (int k=0;k<5;k++) {
bonus_x[k]=random(75);
bonus_y[k]=random(25);
}
------------------------------------
for (int k=0;k<5;k++) {
gotoxy (bonus_x [k],bonus_y [k]);
textcolor (6);
cprintf ("@");
}

Metall 17.01.2008 00:34

Спасибо, но это не помогло

razzzar 17.01.2008 00:37

а сообсвенно не работает? не выводится '@' ?
ты в дебаге прогонял? в массив рандомятся числа?

Metall 17.01.2008 02:22

Цитата:

Сообщение от razzzar
а сообсвенно не работает? не выводится '@' ?
ты в дебаге прогонял? в массив рандомятся числа?

Да, ты все правильно понял. В дебаге не проганял. Не умею.

razzzar 17.01.2008 02:26

учись, без дебага плохо кодить )
можешь сделать ручной дебаг: временый вывод на экран значений переменных.
например:
Код:

int n = random(50);
printf("%d\n", n);



Время: 08:54