Нужны исходники игры (например, змейки) - 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 (); }
Объяснение кода листинга программы
- Объединение считывает таблицу рекордов из файла
zm.tab
. Если файл не найден, то вводится набор символов '*' для каждого элемента таблицы. - В игре есть служебные переменные: x, y, x2, y2, для хранения текущей позиции змейки и хвоста.
- Функция pos используется для определения текущего символа под курсором.
- Функция sl используется для генерации случайного числа в диапазоне от 0 до 77 для определения следующего хода змейки.
- Установка начального значения переменных zmax и zmin равными 40 и 12 соответственно.
- Использование циклов для управления движениями змейки и обработки пользовательского ввода.
- В игре есть переменные lives и bax, которые отслеживают количество жизней и очков соответственно.
- При нажатии клавиши 'e' игра завершается и таблица рекордов сохраняется в файл
zm.tab
. - Для вывода таблицы рекордов используется функция printf.
- Функция ubrsim используется для очистки буфера ввода.
- Если игра не завершена после 100 раундов, то таблица рекордов обновляется с помощью функций fprintf и fclose.
- В конце программы выводится сообщение об авторских правах и название программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д