Нужны исходники игры (например, змейки) - 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.
- В конце программы выводится сообщение об авторских правах и название программы.