Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Игра арканоид 
V
    Опции темы
Alexey91
Дата 29.4.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <dos.h>
#include <stdlib.h>

#define c15 textcolor(15);
#define col 60
#define row 5

int i,j,x=5, y=5, vx=1, vy=1, paddle=1,
    points=0, level=0, timet=0, blocks[row][col];

char a;
float s=1;

clock_t t1=0, t2=0; // timers


void arc(void)
{
 gotoxy(1,25);
 for(i=0; i<79; i++)
 printf(".");
 gotoxy(paddle,25);
 printf("!@@@!");
}

int ball(void)
{
 t2=clock();
 if((t2-t1)*(s/2) < timet) return 0;
 t1=clock();

 gotoxy(x,y); // koordinati sharika
 printf(" "); // zatiraet shleyf sharika

 if(x<=2 || x > 79) vx*=-1;
 if(y>23) // granica. SHAR DOHODIT DO NIZA
 {
  if(x==paddle) // otlet c bolshey skorostiyu s kraya ottolk. udaryatcya ob !xxxx
  {
   vy=-1;
   vx=-1;
   s++;

  }

  if(x==(paddle+1)) // x@xxx
  {
   vy=-1;
   vx=-1;

  }

  if(x==(paddle+2)) // xx@xx
  {
   if(vy==-1) vy=1;
   else vy=-1;
   vx=0;
  }

  if(x==(paddle+3)) // xxx@x
  {
   vy=-1;
   vx=1;
  }

  if(x==(paddle+4))// xxxx!
  {
   vy=-1;
   vx=1;
   s++;
  }

  if(x>(paddle+4) || x < paddle) return 1; // SHAR KRANTI
 }

 if(y<=2) vy*=-1; // OTTALKIVANIE OT POTOLKA

 x+=vx;
 y+=vy;

 gotoxy(x,y);
 printf("*");

 for(i=3; i < row+3; i++)
 {
  for(j=0; j < col; j++)
  {
   if(blocks[i-3][j]==1)
   {
    if(x==(10+j*2) && y==i)
    {
     points++;
     vy*=-1;
     blocks[i-3][j]=0;

    }
   }
  }
 }

 gotoxy(1,1); // INDIKATOR SBITIH KVADRATIKOV
 printf("Points: %d",points);
 return 0;
}

void putsq(void)
{
 textcolor(random(4*2)+1); cprintf("\376");
}

void squares(void)
{
 for(i=3; i < row+3; i++)
 {
  for(j=0; j < col; j++)
  {
   gotoxy(10+j*2,i);
   putsq();
  }
 }
}

void main()
{
 clrscr();
 for(i=0; i < row; i++)
 {
  for(j=0; j < col; j++)
  {
   blocks[i][j]=1;
  }
 }

 do
 {
  c15; cprintf("\nEnter difficulty 1<=diff<=4: ");
  scanf("%d",&level);
 }

 while(level < 1 || level > 4);
 clrscr();
 timet=level+1;
 squares();


 do
 {
  a=0;
  if(kbhit())
  {
   a=getch();
   if(a==77)
   {
    paddle++;

   }
   if(a==75)
   {
    paddle--;

   }
   if(paddle < 1) paddle=1;  // GRANICI DVIJENIYA ARKANOIDA
   if(paddle > 74) paddle=74;
   if(a == 32) break;  // BREAK NA PROBEL
   arc();
  }

  if(ball()) break;
 }
 while(1);

 if(points>100)
 {
  clrscr();
  c15; cprintf("\n\nYou are winner! :)");
  getch();
  return;
 }

 clrscr();
 c15; cprintf("Vi proigrali");

 getch();
}


Поправил, но проблема остается актуальной  smile 

Это сообщение отредактировал(а) Alexey91 - 29.4.2009, 23:52
PM   Вверх
mes
Дата 29.4.2009, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(Alexey91 @  29.4.2009,  22:11 Найти цитируемый пост)
Поправил, но проблема остается актуальной  smile 


Цитата(Alexey91 @  29.4.2009,  22:11 Найти цитируемый пост)
  if(x==(paddle+2)) // xx@xx
  {
   if(vy==-1) vy=1;
   else vy=-1;
   vx=0;

а может все таки 
Код

vy = -1;
vx = -vx;

 ?

Да и посмотрите на свои остальные условия - там куча повторений. Проведите внимательную ревизию и добейтесь, чтоб Вам самим было красиво и понятно, а не лишь бы написать,
и все заработает smile






Это сообщение отредактировал(а) mes - 29.4.2009, 23:53


--------------------
PM MAIL WWW   Вверх
Alexey91
  Дата 30.4.2009, 13:52 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 195
Регистрация: 18.9.2008

Репутация: нет
Всего: нет



Да, mes вообщем ты прав. Сейчас все работает, за помощь спасибо.

Код

#include <string.h>
#include <math.h>
#include <graphics.h>
#include <dos.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#include <process.h>
#include <time.h>

#define path "c:\\borlandc\\bin\\"
#define c15 textcolor(15);
#define col 60
#define row 3

int i,k=10,l=0,j,x=5, y=5, vx=1, vy=1, paddle=1, z,
    points=0, level=0, timet=0, blocks[row][col];

char a,ch;
float s=1;

clock_t t1=0, t2=0; // timers

FILE *f;
struct scores {int p; char name[10];} h;

void stats()
{
  f=fopen("scores.txt","rb");
  fread(&h,sizeof(h),1,f);
  while(!feof(f))
  {printf("%s %d",h.name,h.p); putchar('\n'); fread(&h,sizeof(h),1,f);}
  fclose(f);
}

 void arc(void)
{
 gotoxy(1,25);
 for(i=0; i<79; i++)
 printf(".");
 gotoxy(paddle,25);
 printf("!@@@@@!");
}

int ball(void)
{
 t2=clock();
 if((t2-t1)*(s/2) < timet) return 0;
 t1=clock();

 gotoxy(x,y); // koordinati sharika
 c15; cprintf("   "); // zatiraet shleyf sharika

 if(x<=2 || x > 77) vx*=-1;
 if(y>23) // granica. SHAR DOHODIT DO NIZA
 {
  if(x+2==paddle) // (_!)xxxxx
  {
   vy=-1; z=0;
   vx=-1;
   s++;

  }

  if(x+1==(paddle) && x+2==(paddle+1))
   // !@xxxx
  {
   vy=-1; z=-k;
   vx=-1;

  }

  if(x==(paddle) && x+1==(paddle+1) && x+2==(paddle+2))

  {
   vy=-1; z=0;
   vx=-1;

  }

  if(x==(paddle+1) && x+1==(paddle+2) && x+2==(paddle+3)) // xx@@xx
  {
   vy=-1; z=0;
   vx=-1;

  }

  if(x==(paddle+2) && x+1==(paddle+3) && x+2==(paddle+4)) // xxx@@x
  {
   if(vy==1) {vy=-1; vx=0;}
   else vy=1; vx=0;

  }

  if(x==(paddle+3) && x+1==(paddle+4) && x+2==(paddle+5)) // xxxx@!
  {
   vy=-1; z=0;
   vx=1;

  }

  if(x==(paddle+4) && x+1==(paddle+5) && x+2==(paddle+6))
  {
   vy=-1; z=0;
   vx=1;
  }

  if(x==(paddle+5) && x+1==(paddle+6))// xxxxx(!_)
  {
   vy=-1; z=k;
   vx=1;
  }

  if(x==(paddle+6))
  {
   vy=-1; z=0;
   vx=1;
   s++;
  }

  if(x>(paddle+7) || (x+2) < paddle-1){ z=0; return 1;} // SHAR KRANTI
 }

 if(y<=2) vy*=-1; // OTTALKIVANIE OT POTOLKA

 if(z==k && l%4 == 0) vx=1;
 if(z==k && l%4 != 0) vx=0;
 if(z==-k && l%4 == 0) vx=-1;
 if(z==-k && l%4 != 0) vx=0;

 x+=vx;
 y+=vy;
 l++;
 gotoxy(x,y);
 c15; cprintf("[ ]");

 for(i=3; i < row+3; i++)
 {
  for(j=0; j < col; j++)
  {
   if(blocks[i-3][j]==1)
   {
    if(x==(10+j) && y==i)
    {
     blocks[i-3][j]=0;
     points++;
     vy*=-1; vx*=-1;
     z=0;

    }
   }
  }
 }

 gotoxy(1,1); // INDIKATOR SBITIH KVADRATIKOV
 printf("Points: %d",points);
 return 0;
}

void putsq(void)
{
 textcolor(random(4*2)+1); cprintf("\376");
}

void squares(void)
{
 for(i=3; i < row+3; i++)
 {
  for(j=0; j < col; j++)
  {
   gotoxy(10+j,i);
   putsq();
  }
 }
}

void game()
{

 clrscr();
 for(i=0; i < row; i++)
 {
  for(j=0; j < col; j++)
  {
   blocks[i][j]=1;
  }
 }

 do
 {
  c15; cprintf("\nEnter difficulty 1<=diff<=4: ");
  scanf("%d",&level);
 }

 while(level < 1 || level > 4);
 clrscr();
 timet=level+1;
 squares();


 do
 {
  a=0;
  if(kbhit())
  {
   a=getch();
   if(a==77)
   {
    paddle++;

   }
   if(a==75)
   {
    paddle--;

   }
   if(paddle < 2) paddle=2;  // GRANICI DVIJENIYA ARKANOIDA
   if(paddle > 73) paddle=73;
   if(a == 32) break;  // BREAK NA PROBEL
   arc();
  }
  if(ball()) break;
 }
 while(1);


 if(points>100)
 {
  clrscr();
  c15; cprintf("You are winner! Enter your name: "); scanf("%s",&h.name);
 }

 clrscr();
 c15; cprintf("You are loose!( Enter your name: "); scanf("%s",&h.name);

 h.p=points;

 f=fopen("scores.txt","ab");
 fwrite(&h,sizeof(h),1,f);
 fclose(f);

 putchar('\n');
 printf("Eshe raz?: "); ch=getch();

 i,k=10,l=0,j,x=5, y=5, vx=1, vy=1, paddle=1, z,
 points=0, level=0, timet=0;
 a,ch;
 s=1;
 clock_t t1=0, t2=0; // timers
}

void menu(int a,int b,int c)
{
 setcolor(a);
 settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
 outtextxy(235,200,"1. GAME");

setcolor(b);
 settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
 outtextxy(235,230,"2. SCORE");

 setcolor(c);
 settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
 outtextxy(235,260,"3. EXIT");
}

void main()
{
 // <Подключение графики>
int gdriver=DETECT;
int gmode;
int errorcode;

 initgraph(&gdriver,&gmode,path);
 errorcode=graphresult();

 if(errorcode != grOk)
 {
  printf("Error: %d\n",errorcode);
  puts("For ending program press <enter>");
  getch();
  exit(1);
 }  // </Подключение графики>

 // <Логотип игры>
 settextstyle(TRIPLEX_FONT,HORIZ_DIR,0);
 setcolor(LIGHTCYAN);
 setusercharsize(2,1,1,1);
 outtextxy(175,150,"Arcanoid");  // </Логотип игры>

 // <Меню игры>

 char choose;
 int move=1;

 menu(8,8,8);
 choose=getch();



 while(choose!=27)
 {

  if(choose==13)  break;
  if(choose=='P') move++;
  if(choose=='H') move--;

  if(move<1) move=3;
  if(move>3) move=1;

  if(move==1) menu(10,8,8);
  if(move==2) menu(8,10,8);
  if(move==3) menu(8,8,10);


  choose=getch();

  delay(10);

 }
 cleardevice(); closegraph();


  if(move==3) exit(0);
  if(move==1)
  {
   do
   {
    game();

   } while(ch != 'n');
  }

  if(move==2)
  {
   stats();
  }


 printf("Press key to exit");
 getch();
}


Рабочая версия. Может кому-нибудь пригодится.  smile 


Это сообщение отредактировал(а) Alexey91 - 30.4.2009, 13:53
PM   Вверх
zim22
Дата 30.4.2009, 14:10 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



Цитата(Alexey91 @  30.4.2009,  13:52 Найти цитируемый пост)
Рабочая версия. Может кому-нибудь пригодится

у меня не работает(MSVC 2008). вы не могли бы переделать?  smile 


--------------------
PM MAIL   Вверх
allbrandsstars
Дата 27.10.2016, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 27.10.2016

Репутация: нет
Всего: нет



Могу помочь с созданием  игры арканоида  скайп: kuorsun
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0808 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.