Нужны исходники игры (например, змейки) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Друзья, выручайте. Короче задали написать простенькую игру для игры с компьютером на языке С. В я в этом не силён. Может кто сможет помочь, ну или хотя бы кинуть ссылку на исходники.

Решение задачи: «Нужны исходники игры (например, змейки)»

textual
Листинг программы
#include <stdio.h>;
#include <conio.h>;
#include <dos.h>;
#include <stdlib.h>;
char pos (char zmx,char zmy);
char sl (int max);
void ubrsim ();
main ()
{
 char name [15][11];
 auto unsigned z;
 int rezult[15];
 register int x,y;           /*Служебная переменная*/
 auto unsigned lives=0;      /*Жизни*/
 auto unsigned bax=0;        /*Количество очков*/
 auto char zmx3;
 auto char zmy3;
 auto char zmx;              /*Координата x*/
 auto char zmy;              /*Координата y*/
 register char zmx2;         /*Координата хвоста x*/
 register char zmy2;         /*Координата хвоста y*/
 auto char flag;             /*Флаг вывода символа*/
 char mas[78][19];           /*Массив исхода*/
 register char sim;          /*Символ текущий*/
 auto char sim2;             /*Символ введенный*/
 auto char sim3;
 FILE *tab;
 
  /*      Чтение таблицы рекордов     */
 if ((tab=fopen ("zm.tab","r"))!=NULL) {
  for (x=0;x<15;x++) fscanf (tab,"%10s%4d",&name[x],&rezult[x]);
  fclose (tab);
 }
 else
  for (x=0;x<15;x++) {
   for (y=0;y<10;y++) name [x][y]='.';
   name [x][10]='\0';
   rezult[x]=0;
  }
 
/**************************Вывод страницы экрана****************************/
 do
 {
  bax=0;
  textmode (C80);
  clrscr ();
  gotoxy (30,1);
  textcolor (15);  
  cprintf ("Gai software present");
  gotoxy (34,2);
  cprintf ("'ЗМЕЙКА'");
  gotoxy (24,3);
  cprintf ("Врезания - %4u     очки - %4u",lives,bax);
  textcolor (BLUE);
  gotoxy (1,4);
  for (x=0;x<80;x++) putch ('*');
  for (x=5;x<24;x++) 
  {
   putch ('*');
   gotoxy (80,x);
   putch ('*');
  }
  for (x=0;x<80;x++) putch ('*');
  printf ("Для выхода нажми 'e'");
  ubrsim ();
  sim=getch ();
  if (sim!='e')
  {
 
/**********************************Сама игра*********************************/
  
   for (x=0;x<78;x++) for (y=0;y<19;y++) mas [x][y]=0;
   zmx=40;
   zmx2=zmx;
   zmy=12;
   zmy2=zmy;
   flag=0;
   sim='6';
   sim2='6';
   bax=0;
   do
   { 
    gotoxy (zmx,zmy);
    putch ('$');
    if (flag)
    {
     gotoxy (zmx2,zmy2);
     putch (' ');
     switch (mas [zmx2-2][zmy2-5])
     { 
      case '8': zmy2--;break;
      case '4': zmx2--;break;
      case '6': zmx2++;break;
      default: zmy2++;break;
     }
    }  
    else
    {
     do 
     {
      zmx3=sl(78)+2;
      zmy3=sl(19)+5;
      gotoxy (zmx3,zmy3);
     }
     while ((pos(zmx3,zmy3)=='$')||(pos(zmx3,zmy3)=='~'));
     putch ('~');
     flag=1;
    }
    switch (sim=mas [zmx-2][zmy-5]=((kbhit())?(sim2=getch()):sim2))
    { 
     case '8': zmy--;break;
     case '4': zmx--;break;
     case '6': zmx++;break;
     default: zmy++;break;
    }    
    delay (50);
    sim3=pos(zmx,zmy);
    if (sim3=='~')
    {
     flag=0;
     bax++;
    }   
    gotoxy (24,3);
    cprintf ("Врезания - %4u     очки - %4u",lives,bax);
   }
   while ((sim!='e')&&(sim3!='*')&&(sim3!='$'));
  }
  lives++;
  clrscr ();
  y=377;
  for (x=0;x<15;x++) if ((bax>rezult[x])&&(y==377)) y=x;
  if (y!=377) {
   for (x=14;x>=y;x--) {
    for (z=0;z<10;z++) name [x+1][z]=name [x][z];
    rezult [x+1]=rezult[x];
   }
   for (z=0;z<10;z++) name[y][z]='.';
   name [y][10]='\0';
   rezult[y]=bax;
  }
  printf ("!----------!----!\n");
  for (x=0;x<15;x++) printf ("!%10s!%4d!\n",name[x],rezult[x]);
  printf ("!----------!----!\n");
  ubrsim ();
  if (y!=377)  {
   gotoxy (2,y+2);
   textcolor (15);
   cgets (name[y]);
  }
  getch ();
 }
 while ((sim!='e')&&(lives<100));
 clrscr ();
 if ((tab=fopen ("zm.tab","w"))!=NULL) {
  for (x=0;x<15;x++) fprintf (tab,"%10s%4d",name[x],rezult[x]); 
  fclose (tab);
 }
 printf ("Программа zm написана в 'TurboC', (c) RSC, 1996");
 ubrsim ();
 getch ();
}
 
char pos (char zmx,char zmy)
{
 gotoxy (zmx,zmy);
 _AH=8;
 _BH=0;
 geninterrupt (0x10);
 return ((char)_AL);
}
char sl (int max)
{
char adr;
adr=(char)(((unsigned)rand())%(unsigned)max);
return (adr);
}
 
void ubrsim ()
{
 while (kbhit ()) getch ();
}

Объяснение кода листинга программы

  1. Объединение считывает таблицу рекордов из файла zm.tab. Если файл не найден, то вводится набор символов '*' для каждого элемента таблицы.
  2. В игре есть служебные переменные: x, y, x2, y2, для хранения текущей позиции змейки и хвоста.
  3. Функция pos используется для определения текущего символа под курсором.
  4. Функция sl используется для генерации случайного числа в диапазоне от 0 до 77 для определения следующего хода змейки.
  5. Установка начального значения переменных zmax и zmin равными 40 и 12 соответственно.
  6. Использование циклов для управления движениями змейки и обработки пользовательского ввода.
  7. В игре есть переменные lives и bax, которые отслеживают количество жизней и очков соответственно.
  8. При нажатии клавиши 'e' игра завершается и таблица рекордов сохраняется в файл zm.tab.
  9. Для вывода таблицы рекордов используется функция printf.
  10. Функция ubrsim используется для очистки буфера ввода.
  11. Если игра не завершена после 100 раундов, то таблица рекордов обновляется с помощью функций fprintf и fclose.
  12. В конце программы выводится сообщение об авторских правах и название программы.

Оцени полезность:

11   голосов , оценка 4.182 из 5
Похожие ответы