Zdravim zkousim si delat Karla (doufam ze kazdy zna) nicmene zadrhnul jsem se u pokladani cihlicek protoze vlastne ten muj objekt (Karlik:D) jezdi po tom poli pomoci prikazu a potreboval bych aby po prikazu ... "poloz" polozil na svoji pozici XY znak "219" = █ alias cihla:D no fajn to bych zvladnul ale tu je ten problem kdyz to polozim tak vlastne je tam znak █ ale kdyz tim karlem pres nej zase prejedu tak zmizi a putne se na nej zase znak karla = ◄ a ta cihla mi zmizi.. potreboval bych ji tam dat nejak na trvalo ... prikladam zdrojovy kod karla doufam ze me neukamenujete jak mam vse spatne :D + pokud by jste meli nejake vylepseni nebo vidite co mam vse spatne prosim napiste mi to rad se poucim :)
zdrojovy kod ->
/* Hlavnickove soubory */
#include <stdio.h>
#include "funkce.h"
#define POLOZKY 4 /* Pocet polozek v menu */
#define RADKY 24 /* Pocet radku v poli */
#define SLOUPCE 80 /* Pocet sloupecku v poli */
int i,j; /* Ridici promenne cyklu */
/* Funkce */
void menu(void);
void vypis_menu(int pozice);
void HlavaMenu(void);
void start(void);
void info(void);
void prikazy(void);
void vykresli_ramecek(void);
int karel_left = 42,karel_top = 22;
char prikaz[0];
int i;
int main(void)
{
int karel = 16;
menu();
return 0;
}
void menu(void)
{
HlavaMenu();
int pozice = 1;
vypis_menu(1);
while(1)
{
if (kbhit())
{
int key;
key = MyGetch();
if (key) {
switch (key) {
case 27: /* Escape */
exit(0);
break;
case 328: /* Sipka nahoru */
if (pozice > 1) pozice--;
else pozice = POLOZKY;
break;
case 336: /* Sipka dolu */
if (pozice < POLOZKY) pozice++;
else pozice = 1;
break;
case 13: /* Enter */
switch (pozice)
{
case 1: start();
break;
case 2: info();
break;
case 3: prikazy();
exit(0);
case 4: vymaz();
exit(0);
}
default:
continue;
}
}
vypis_menu(pozice);
}
}
}
void vypis_menu(int pozice)
{ /* Pole polozek */
char *polozky[] = {"Start", "Info","Prikazy", "Konec"};
/* For cyklus pro vypsani polozek */
for(i = 0; i < POLOZKY; i++)
{
gotoxy(35,10+i+i);
if ((i+1)==pozice) barva(3); else barva(0);
printf("%s\n",polozky[i]);
}
}
void HlavaMenu(void)
{
vymaz();
gotoxy(27,1);
barva(3);
printf("K A R E L T H E R O B O T");
}
void start(void)
{
char prikaz[0];
int karel = 16;
system("cls");
vykresli_ramecek();
int i; /* promenna cyklu */
for(i=0;i<500;i++)
{
if(karel_left == 40) /* pokud se karel dotyka leve zdi neprojde dal */
{
karel_left += 1;
}
else if(karel_top == 0) /* pokud se karel dotyka horni zdi neprojde dal */
{
karel_top += 1;
}
else if(karel_top == 24) /* pokud se karel dotyka spodni zdi neprojde dal */
{
karel_top -= 1;
}
else if(karel_left == 79)/* pokud se karel dotyka prave zdi neprojde dal */
{
karel_left -= 1;
}
barva(3);
gotoxy(karel_left,karel_top);
putc(karel, stdout);
gotoxy(2,2);
printf("zadej prikaz :");
scanf("%s", &prikaz);
if(!strcmp("vpravo",prikaz))
{
if(karel == 16)
{
karel += 15;
}
else if(karel == 31)
{
karel -= 14;
}
else if(karel == 17)
{
karel += 13;
}
else if(karel == 30)
{
karel -= 14;
}
}
else if(!strcmp("vlevo",prikaz))
{
if(karel == 16)
{
karel += 14;
}
else if(karel == 30)
{
karel -= 13;
}
else if(karel == 17)
{
karel += 14;
}
else if(karel == 31)
{
karel -= 15;
}
}
else if(!strcmp("krok",prikaz))
{
if(karel == 16)
{
karel_left += 1;
gotoxy(karel_left-1,karel_top);
barva(-1);
putc(219,stdout);
}
else if(karel == 30)
{
karel_top -= 1;
gotoxy(karel_left,karel_top+1);
barva(-1);
putc(219,stdout);
}
else if(karel == 17)
{
karel_left -= 1;
gotoxy(karel_left+1,karel_top);
barva(-1);
putc(219,stdout);
}
else if(karel == 31)
{
karel_top += 1;
gotoxy(karel_left,karel_top-1);
barva(-1);
putc(219,stdout);
}
}
else if(!strcmp("konec",prikaz))
{
getchar();
menu();
}
}
}
void info()
{
HlavaMenu();
gotoxy(0,5);
barva(3);
printf("Info :\n\n");
printf("Autor : ");
barva(0);
printf("Tomas ....\n");
barva(3);
printf("Datum : ");
barva(0);
printf("27.07.2012\n");
barva(3);
printf("Komp. : ");
barva(0);
printf("CodeBlocks\n");
barva(3);
printf("Jazyk : ");
barva(0);
printf("Programovaci jazyk C\n\n");
barva(3);
printf("O Karlovi : \n\n");
barva(0);
printf("Karel predstavuje robota,ktery se pohybuje ve svem meste a vykonava prikazy,\nstavi zdi a nebo se jen tak prochazi od zdi ke zdi:).");
getchar();
menu();
}
void prikazy(void)
{
HlavaMenu();
gotoxy(0,5);
barva(3);
printf("Karel ovlada nasledujici prikazy: \n\n");
barva(3);
printf("Prikaz : ");
barva(0);
printf("vpravo [Otoci robota vpravo!] \n");
barva(3);
printf("Prikaz : ");
barva(0);
printf("vlevo [Otoci robota vlevo!] \n");
barva(3);
printf("Prikaz : ");
barva(0);
printf("krok [Udela krok v pred!] \n");
barva(3);
printf("Prikaz : ");
barva(0);
printf("poloz [Polozi cihlu!] [Zatim nefunkcni!]\n");
barva(3);
printf("Prikaz : ");
barva(0);
printf("konec [Vrati te do hlavniho menu!] \n");
getchar();
menu();
}
vykresli_ramecek(void)
{
for(i=0; i<SLOUPCE;i++)
{
barva(1);
gotoxy(i,0);
putc('#', stdout);
}
for(i=0; i<SLOUPCE;i++)
{
gotoxy(i,RADKY);
putc('#', stdout);
}
for(j=0;j<RADKY;j++)
{
gotoxy(0,j);
putc('#', stdout);
}
for(j=0;j<RADKY;j++)
{
gotoxy(79,j);
putc('#', stdout);
}
for(i=0; i<RADKY;i++)
{
gotoxy(40,i);
putc('#', stdout);
}
}