PDA

View Full Version : سوال: کشیدن جدول و حرکت بین خانه های آن



samin_panahi
دوشنبه 14 بهمن 1392, 20:32 عصر
سلام
می خوام یه جدول 4*5 بکشم
و بعد می خوام یه شکل مثل * تو خونه هاش حرکت کنه
برای کشیدن جدول این کد رو نوشتم ولی یکم ایراد داره، چطور ایرادش رو بر طرف کنم؟

int main()
{
for(int i=0;i<5;i++)
{
cout<<"|";
for(int j=0;j<4;j++)
{

cout<<"---";
cout<<"|";
}
cout<<"\n|\n";
}
system("pause");
return 0;
}

برای حرکت هم تا حالا همچین کاری نکردم ممنون می شم راهنمایی کنید

rahnema1
سه شنبه 15 بهمن 1392, 07:22 صبح
سلام، بهتره قبلا نقشه جدول را بکشی و در یک آرایه کاراکتر ذخیره کنی و هر وقت خواستی چاپ کنی


#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void curPos(int, int);
void horse(int x,int y);
int main(){
unsigned char rawData[322] = {
0xDA, 0xC4, 0xC2, 0xC4, 0xC2, 0xC4, 0xC2, 0xC4, 0xC2, 0xC4, 0xC2, 0xC4,
0xC2, 0xC4, 0xC2, 0xC4, 0xBF, 0x0D, 0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D,
0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x0D, 0x0A, 0xC3, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x0D, 0x0A,
0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x0D, 0x0A, 0xC0, 0xC4, 0xC1, 0xC4, 0xC1, 0xC4, 0xC1, 0xC4,
0xC1, 0xC4, 0xC1, 0xC4, 0xC1, 0xC4, 0xC1, 0xC4, 0xD9, 0x00
};
int i,j;
system("CLS");
printf("%s",rawData);
for (i=0;i<8;i++) for (j=0;j<8;j++) {horse(i,j);Sleep(500);}
curPos(17,17);
}
void curPos(int x, int y) {
HANDLE hStdout;
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout, &csbiInfo);
csbiInfo.dwCursorPosition.X=x;
csbiInfo.dwCursorPosition.Y=y;
SetConsoleCursorPosition(hStdout, csbiInfo.dwCursorPosition);
}
void horse(int x,int y)
{
curPos(x*2+1,y*2+1);
printf("%c",0x02);

}

samin_panahi
سه شنبه 15 بهمن 1392, 07:36 صبح
چه جالب
تا حالا همچین کاری نکرده بودم، خیلی ممنون
حالا اگه بخوان داخل یکی از خونه هاش یه کاراکتر * بذارم باید چه کار کنم؟
اگه cout بذارم بهم می ریزه
البته من اینو اجرا گرفتم


#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;

int main()
{
unsigned char rawData[322] = {
0xDA, 0xC4, 0xC2, 0xC4, 0xC2, 0xC4, 0xC2, 0xC4, 0xC2, 0xC4, 0xC2, 0xC4,
0xC2, 0xC4, 0xC2, 0xC4, 0xBF, 0x0D, 0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D,
0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x0D, 0x0A, 0xC3, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x0D, 0x0A,
0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x0D, 0x0A, 0xC3, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4,
0xC5, 0xC4, 0xC5, 0xC4, 0xC5, 0xC4, 0xB4, 0x0D, 0x0A, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3, 0x20, 0xB3,
0x20, 0xB3, 0x0D, 0x0A, 0xC0, 0xC4, 0xC1, 0xC4, 0xC1, 0xC4, 0xC1, 0xC4,
0xC1, 0xC4, 0xC1, 0xC4, 0xC1, 0xC4, 0xC1, 0xC4, 0xD9, 0x00
};

int i;


for (i=0;i<322;i++)
{
cout<<rawData[i];
}

system("pause");
return 0;
}


این قسمت خطا داشت


void curPos(int x, int y) {
HANDLE hStdout;
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout, &csbiInfo);
csbiInfo.dwCursorPosition.X=x;
csbiInfo.wAttributes.
csbiInfo.dwCursorPosition.Y=y;
SetConsoleCursorPosition(hStdout, csbiInfo.dwCursorPosition);
}

rahnema1
سه شنبه 15 بهمن 1392, 11:05 صبح
معلومه خیلی سریع کد را گرفتید چون من همون لحظه که فرستادم کد را اصلاح کردم و csbiInfo.wAttributes. اضافیه.
برای چاپ ستاره در تابع horse و به جای

printf("%c",0x02);

بذارید

printf("%c",'*');

یا

cout<<(char)0x02;

همچنین می تونید به جای اعداد هگز از معادل ده دهی استفاده کنید

mostafi1391
چهارشنبه 16 بهمن 1392, 20:37 عصر
راهنما جان اگه میشه در مورد ذخیره کردن شکل جدول تو آرایه توضیج بده با چه الگوریتمی ستونا و ردیفا ردیفا قرار دادی

rahnema1
پنج شنبه 17 بهمن 1392, 10:56 صبح
با دست هم میشه نقشه رو درست کرد اما چون این کاراکترها جزء کاراکترهای اسکی نیست باید فایل cpp با کدپیج OEM720 ذخیره بشه


unsigned char rawData[108]={
'┌','─','┬','─','┬','─','┬','─',' ','─','┐',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┤',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┤',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┤',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'└','─','┴','─','┴','─','┴','─',' ','─','┘', 0};



#include <stdlib.h>
#include <stdio.h>
int main()
{
int i,j,m,cellx=4,celly=5;
unsigned char rawData[9][12]; //rawData[cellx*2+1][celly*2+2]
for(i=0;i<cellx+1;i++)
{
for(j=0;j<celly;j++)
rawData[i*2][j*2+1]=196;
for(m=0;m<celly+1;m++)
rawData[i*2+1][m*2+1]=32;
}
for(i=0;i<cellx;i++)
for(j=0;j<celly+1;j++)
rawData[i*2+1][j*2]=179;
for(i=1;i<cellx;i++)
{
rawData[i*2][celly*2]=180;
rawData[i*2][0]=195;
for(j=1;j<celly;j++)
rawData[i*2][j*2]=197;
}
for(j=1;j<celly;j++)
{
rawData[cellx*2][j*2]=193;
rawData[0][j*2]=194;
}
rawData[0][celly*2]=191;
rawData[cellx*2][0]=192;
rawData[cellx*2][celly*2]=217;
rawData[0][0]=218;
for(i=0;i<cellx*2+1;i++)
rawData[i][celly*2+1]=10;
rawData[cellx*2][celly*2+1]=0;

///**********
system("CLS");
printf("%s",rawData);
printf("\n\n");
printf("unsigned char rawData[%d]={\n",(2*cellx+1)*(2*celly+2));
for(i=0;i<cellx*2+1;i++){
for(j=0;j<celly*2+1;j++)
printf("%3d,",rawData[i][j]);
if (i<cellx*2) {printf(" 10,\n");} else printf(" 0};\n");
}
printf("\n");
printf("unsigned char rawData[%d]={\n",(2*cellx+1)*(2*celly+2));
for(i=0;i<cellx*2+1;i++){
for(j=0;j<celly*2+1;j++)
printf("0x%X,",rawData[i][j]);
if (i<cellx*2) {printf("0x0D,\n");} else printf("0x00};\n");
}
printf("\n");
printf("unsigned char rawData[%d]={\n",(2*cellx+1)*(2*celly+2));
for(i=0;i<cellx*2+1;i++){
for(j=0;j<celly*2+1;j++)
printf("'%c',",rawData[i][j]);
if (i<cellx*2) {printf("10,\n");} else printf(" 0};\n");
}
//system("PAUSE");
return 0;
}




#include <iostream>
using namespace std;
int main()
{
char rawData[306]={
'┌','─','┬','─','┬','─','┬','─',' ','─','┬','─','┬','─','┬','─','┐ ',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┼','─','┼','─','┼','─','┤ ',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┼','─','┼','─','┼','─','┤ ',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┼','─','┼','─','┼','─','┤ ',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┼','─','┼','─','┼','─','┤ ',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┼','─','┼','─','┼','─','┤ ',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┼','─','┼','─','┼','─','┤ ',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'├','─','┼','─','┼','─','┼','─',' ','─','┼','─','┼','─','┼','─','┤ ',10,
'│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',' ','│',10,
'└','─','┴','─','┴','─','┴','─',' ','─','┴','─','┴','─','┴','─','┘ ', 0};
cout<<rawData;
}