mehran34
سه شنبه 16 دی 1393, 00:55 صبح
سلام من می خواستم یک برنامه بنویسم که داخل یک آرایه [18][21] در سطر آخر و قسمت وسط آن یک دسته به صورت <===> تعریف کنیم با کاراتر و بعدش اون رو تغییر مکان بدیم و هر دفعه که کلید رو فشار میدیم این دسته جابجا بشه و نحوه تغییر مکان هم با استفاده از کد اسکی کیبرد هستش کد زیر رو نوشتم مشکل این هست که فقط وقتی کلید رو فشار بدیم میره مکان جدید و وقتی دستمون رو برداریم بر میگرده به جای قبلیش لطفا کمک کنید تا بتونم مشکل این کد رو بر طرف کنم با تشکر فراوان
int m=19,o=5;
a[m][o]=60;
a[m][o+2]=61;
a[m][o+3]=61;
a[m][o+1]=61;
a[m][o+4]=62;
while(_kbhit())
{
char c=_getch();
c=_getch();
if (c==77)
m++;
o++;
a[m][o]=60;
a[m][o+2]=61;
a[m][o+3]=61;
a[m][o+1]=61;
a[m][o+4]=62;
}
mehran34
چهارشنبه 17 دی 1393, 00:17 صبح
راستی خودم هم فکر میکنم به احتمال بسیار زیاد باید از پوینتر استفاده کنیم ولی خودم هم امتحان کردم به مشکل بر خوردم لطفا کمک کنید با تشکر
rahnema1
چهارشنبه 17 دی 1393, 22:41 عصر
سلام
این یک نمونه
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define BALA 72
#define PAIN 80
#define RAST 77
#define CHAP 75
int max(int a,int b)
{
return (a > b? a: b);
}
int min(int a,int b)
{
return (a < b? a: b);
}
int main()
{
int i;
int key = 0;
const int numRows = 21;
const int numCols = 18;
char map[numRows][numCols + 1];
const char flash[] = "<===>";
int flashLen = strlen(flash);
int flashRow = numRows -1 ;
int flashCol = numCols / 2 - flashLen / 2;
memset(map , ' ', numRows * (numCols + 1));
memcpy(&map[flashRow][flashCol], flash , flashLen);
for ( i= 0; i < numRows - 1; i++)
{
map[i][numCols] = '\n';
}
map[numRows - 1][numCols] = '\0';
system("cls");
printf("%s" , (char*) map);
while(1)
{
key = getch();
if (!kbhit())
{
if (key == BALA || key == PAIN || key == RAST || key == CHAP)
{
memset(&map[flashRow][flashCol] , ' ',flashLen);
switch (key)
{
case BALA:
flashRow = max(flashRow - 1 , 0);
break;
case PAIN:
flashRow = min(flashRow + 1 , numRows - 1);
break;
case RAST:
flashCol = min(flashCol + 1 , numCols - flashLen);
break;
case CHAP:
flashCol = max(flashCol - 1 , 0);
break;
}
memcpy(&map[flashRow][flashCol], flash , flashLen);
system("cls");
printf("%s" , (char*) map);
}
}
}
}
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.