У меня есть проблема с моими препятствиями, потому что, когда я пытаюсь сравнить возможность моего объекта с возможностью препятствия, это не работает, я пытался что-то вроде этого:
int x, y;
for(x=0; x<24; x++){
if(tab[2][x]==tab[S.y][S.y]){
gra=0;
}
}
но он перестает работать, когда я опускаюсь, потому что у меня будет 2, и я не знаю, как с этим справиться.
И я хотел бы перемещать свой объект по таймеру, не нажимая стрелки все время, просто нажимайте их, когда я хочу изменить направление своего движения.
utworz_tablice();
plansza();
time_t ostatnia_zmiana= clock();
time_t teraz= clock();
int gra=1;
int speed=300;
while (gra==1){
while (teraz - ostatnia_zmiana < speed)
{
teraz= clock();
if (kbhit()){
int c = getch();
//printf("%d",c);
if (c==224){
c = getch();
//printf("%d",c);
switch (c){
case 72:
if (S.y>0) {
S.y--;
gotoxy(S.x, S.y);
printf(">");
}
break;
case 80:
if (S.y>0) {
S.y++;
gotoxy(S.x, S.y);
printf(">");
}
break;
case 77:
if (S.x>0) {
S.x++;
gotoxy(S.x, S.y);
printf(">");
}
break;
case 75:
if (S.x>0) {
S.x--;
gotoxy(S.x, S.y);
printf(">");
}
break;
}
}
};
}
ostatnia_zmiana= clock();
Вот весь код:
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <stdlib.h>
#define wysokosc 15
#define szerokosc 25
int **tab;
COORD coord = {0, 0};
void plansza(){
system("CLS");
int i, j;
printf("#");
for(i=1; i<=szerokosc; i++){
printf("=");
}
printf("#\n");
for(j=1; j<=wysokosc; j++){
printf("|");
for(i=1; i<=szerokosc; i++){
if(tab[j-1][i-1]==1){
printf(">");
}
else if(tab[j-1][i-1]==2){
printf("=");
}
else if(tab[j-1][i-1]==3){
printf("|");
}
else if(tab[j-1][i-1]==4){
printf("$");
}
else{
printf(" ");
}
}
printf("|\n");
}
printf("#");
for(i=1; i<=szerokosc; i++){
printf("=");
}
printf("#\n");
}
struct Statek{
int x, y;
}Statek;
struct Statek S;
void print(){
system("CLS");
coord.X = 0;
coord.Y = 0;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
printf(">");
}
void utworz_tablice(){
tab=malloc(sizeof(int*)*wysokosc);
int i,j;
for (i=0; i<wysokosc; i++)
tab[i] = malloc(sizeof(int)*szerokosc);
for(i = 0; i<wysokosc; i++)
for(j = 0; j<szerokosc; j++)
tab[i][j] = 0;
tab[0][0]=1; // statek
for(j=0; j<24; j++){
tab[1][j]=2;
}
for(i=2; i<4; i++){
for(j=23; j<24; j++){
tab[i][j]=3;
}
}
for(i=4; i<5; i++){
for(j=19; j<24; j++){
tab[i][j]=2;
}
}
for(i=2; i<4; i++){
for(j=20; j<23; j++){
tab[i][j]=4; // 4 -> $
}
}
for(i=2; i<4; i++){
tab[i][19]=3;
}
//slimak
for(j=1; j<=17; j+=4){
for(i=3; i<6; i++){
tab[i][j]=3;
}
}
for(j=3; j<=15; j+=4){
for(i=2; i<5; i++){
tab[i][j]=3; // (3 -> |) (2 -> -)
}
}
//koniec slimaka
for(j=1; j<=szerokosc; j++){
tab[6][j]=2;
}
for(j=1; j<szerokosc; j+=2){
tab[8][j]=4;
}
for(j=0; j<24; j++){
tab[10][j]=2;
}
// plotki
for(j=3; j<=23; j+=4){
tab[11][j]=3;
}
for(j=1; j<=21; j+=4){
tab[12][j]=3;
}
// koniec plotkow
for(j=1; j<szerokosc; j++){
tab[13][j]=2;
}
S.x=1, S.y=1;
}
void gotoxy (int x, int y)
{
coord.X = x; coord.Y = y; // X and Y coordinates
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
int main(){
utworz_tablice();
plansza();
time_t ostatnia_zmiana= clock();
time_t teraz= clock();
int gra=1;
int speed=300;
while (gra==1){
while (teraz - ostatnia_zmiana < speed)
{
teraz= clock();
if (kbhit()){
int c = getch();
//printf("%d",c);
if (c==224){
c = getch();
//printf("%d",c);
switch (c){
case 72:
if (S.y>0) {
S.y--;
gotoxy(S.x, S.y);
printf(">");
}
break;
case 80:
if (S.y>0) {
S.y++;
gotoxy(S.x, S.y);
printf(">");
}
break;
case 77:
if (S.x>0) {
S.x++;
gotoxy(S.x, S.y);
printf(">");
}
break;
case 75:
if (S.x>0) {
S.x--;
gotoxy(S.x, S.y);
printf(">");
}
break;
}
}
};
}
ostatnia_zmiana= clock();
if(S.x>szerokosc || S.y>wysokosc || S.x<=0 || S.y<=0){
gra=0;
system("CLS");
gotoxy(15, 7);
printf("Game over\n\n");
}
int x, y;
for(x=0; x<24; x++){
if(tab[2][x]==tab[S.y][S.y]){
gra=0;
}
}
}
}