私は現在、家の大きさに基づいて画面に家を表示するプログラムを書いています。また、escのキーを押すと、'A'
'S'
'W'
'D'
キーが押されてブレークします。今、私はこれらの機能のすべてを働かせ、クリアスクリーン機能を借用しました。私は画面上にあるこの画像を上下に移動したいと思います。私は非常に近いと知っていますが、私はどのように絵を動かすべきかわかりません。ユーザーが "d"を押すとプログラムを右に移動したいと思います。これはx座標に1を加え、左からaを押してxから1を引いて移動し、同様に上に移動すると仮定しています「w」または「s」を押してy値を加算または減算します。キー押しを使用して画面上の画像を移動するにはどうすればよいですか?
#include <windows.h>
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
void ClearScreen();
void draw(int j)
{
cout <<" /";
for(int c=0; c<j; c++)
{
cout <<" ";
}
{
cout << "\\ \n";
}
cout << " /";
for(int c=0; c<j; c++)
{
cout << " ";
}
cout <<" \\ \n";
cout << "/";
for(int c=0; c<j; c++)
{
cout <<" ";
}
cout <<" \\ \n";
cout <<"|";
for(int c=0; c<j; c++)
{
cout << "----";
}
cout <<"| \n";
cout <<"|";
for(int c=0; c<j; c++)
{
cout << " ";
}
cout <<"| \n";
cout <<"|";
for(int c=0; c<j; c++)
{
cout << " ";
}
cout <<"| \n";
cout <<"|";
for(int c=0; c<j; c++)
{
cout << "----";
}
cout <<"| \n";
}
/////////////////////////////////
////////////////////////////////
void Move(int key,int housesize)
{
if (key ==97)
{
cout << "you pressed 'a' \n";
draw(housesize);
}
else if (key==115)
{
cout<< "you pressed 's' \n \t";
draw(housesize);
}
else if (key==100)
{
cout<< "you pressed 'd' \n";
draw(housesize);
}
else if (key==119)
{
cout<< "you pressed 'w' \n";
draw(housesize);
}
}
////// MAIN //////////////
int main(int argc, char *argv[])
{
int i,number;
char letter;
cout << "How large would you like me to draw a house from 1 to 5? \n";
cin >> i;
draw(i);
cout << "Press a key to move the picture and esc to close \n";
while(1)
{
letter=getch();
number=letter;
if(number==27)
{
break;
}
else if (number !=27)
{
Move(number, i);
}
ClearScreen();
Move(number, i);
}
system ("PAUSE");
return 0;
}
////// CLEARSCREEN ////////////////////////////////////
void ClearScreen()
{
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD count;
DWORD cellCount;
COORD homeCoords = { 0, 0 };
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdOut == INVALID_HANDLE_VALUE) return;
/* Get the number of cells in the current buffer */
if (!GetConsoleScreenBufferInfo(hStdOut, &csbi)) return;
cellCount = csbi.dwSize.X *csbi.dwSize.Y;
/* Fill the entire buffer with spaces */
if (!FillConsoleOutputCharacter(
hStdOut,(TCHAR) ' ',cellCount,homeCoords,&count)) return;
/* Fill the entire buffer with the current colors and attributes */
if (!FillConsoleOutputAttribute(
hStdOut,csbi.wAttributes,cellCount,homeCoords,&count)) return;
/* Move the cursor home */
SetConsoleCursorPosition(hStdOut, homeCoords);
}
大丈夫、その見栄えが良いです。50x50の最小値を持つように、パラメータの部分で手伝ってもらえますか?ボックスの上を上に行くとランタイムエラーが発生します。 – CaliBreeze
住宅の大きさに応じて家の高さと幅を計算する関数が必要です。あなたが限界を超えていないことを確認するために、Move()でこれらを使用してください(例: 'if(v + width(housesize)<50)v ++;') – Christophe
int&vとint&h部?このような宣言は一度も見たことがありません – CaliBreeze