Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Написал свою первую игру месяца 2 назад. Добавил массивы недавно. Теперь не работает |

16.01.2008, 23:29
|
|
Познающий
Регистрация: 04.01.2008
Сообщений: 62
Провел на форуме: 490685
Репутация:
30
|
|
Написал свою первую игру месяца 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("ВЫ ВЫИГРАЛИ!");
}
|
|
|

17.01.2008, 00:25
|
|
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме: 725870
Репутация:
208
|
|
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 ("@");
}
|
|
|

17.01.2008, 00:34
|
|
Познающий
Регистрация: 04.01.2008
Сообщений: 62
Провел на форуме: 490685
Репутация:
30
|
|
Спасибо, но это не помогло
|
|
|

17.01.2008, 00:37
|
|
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме: 725870
Репутация:
208
|
|
а сообсвенно не работает? не выводится '@' ?
ты в дебаге прогонял? в массив рандомятся числа?
|
|
|

17.01.2008, 02:22
|
|
Познающий
Регистрация: 04.01.2008
Сообщений: 62
Провел на форуме: 490685
Репутация:
30
|
|
Сообщение от razzzar
а сообсвенно не работает? не выводится '@' ?
ты в дебаге прогонял? в массив рандомятся числа?
Да, ты все правильно понял. В дебаге не проганял. Не умею.
|
|
|

17.01.2008, 02:26
|
|
Участник форума
Регистрация: 16.06.2007
Сообщений: 107
Провел на форуме: 725870
Репутация:
208
|
|
учись, без дебага плохо кодить )
можешь сделать ручной дебаг: временый вывод на экран значений переменных.
например:
Код:
int n = random(50);
printf("%d\n", n);
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|