比较c中的表并使用时钟问题
Compareing tables in c and using clock problem
我的障碍物有问题,因为当我尝试将我的物体的位置与障碍物的位置进行比较时它不起作用,我正在尝试类似的事情:
int x, y;
for(x=0; x<24; x++){
if(tab[2][x]==tab[S.y][S.y]){
gra=0;
}
}
但是当我向下移动时它停止工作,因为我的 y 将是 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;
}
}
}
}
尝试将其粘贴到 if(在 main ofc 的底部)
tab[S.y-1][S.x-1] != 1 && tab[S.y-1][S.x-1] != 0
我的障碍物有问题,因为当我尝试将我的物体的位置与障碍物的位置进行比较时它不起作用,我正在尝试类似的事情:
int x, y;
for(x=0; x<24; x++){
if(tab[2][x]==tab[S.y][S.y]){
gra=0;
}
}
但是当我向下移动时它停止工作,因为我的 y 将是 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;
}
}
}
}
尝试将其粘贴到 if(在 main ofc 的底部)
tab[S.y-1][S.x-1] != 1 && tab[S.y-1][S.x-1] != 0