1. c語言奔跑的小人,是從左往右走的 現在要它從右面往左走,怎麼修改 #include<stdio.
把初始值a = 20; while循環改成a >= 0 最後的a ++ 改成a --就好了
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
intmain(){
inta,b;a=20;//---------------------
while(a>=0){//-------------------------
system("clear");
b=1;
while(b<=a){
printf("");
b++;
}
printf("O ");
b=1;
while(b<=a){
printf("");
b++;
}
printf("<H> ");
b=1;
while(b<=a){
printf("");
b++;
}
printf("II ");
sleep(1);
a--;//--------------------------------------
}
}
2. 用c語言怎樣實現像素的復制
一般要畫滑鼠用一個8*16的像素位置,你可以自己先定義好數組,然後步驟如下:while(1){如果不是第一次繪制滑鼠,則用已保存的圖像覆蓋曾經滑鼠位置.bios中斷獲取滑鼠位置,如果滑鼠發生移動(和以前的位置不一樣),保存此位置下8*16的圖像,保存滑鼠位置,繪制滑鼠.如果發生CLK事件,則跳出循環,處理你的程序.}
3. C語言中怎麼控制小人的移動
每次循環的時候,檢測按鍵,如果有按鍵按下,就改變小人的坐標,下次重繪的時候,使用新的坐標,就相當於小人運動了
4. C語言,我的小人在動的時候會閃屏,我用的是cls實現的,求知道該怎麼辦
利用控制游標的API頭文件在windows.h(游標就是那個一閃一閃的輸入提示符)
-----
HANDLE handle;
COORD coord;
handle=GetStdHandle(STD_OUTPUT_HANDLE);
coord.X=0; // 這里是游標目標位置的橫坐標(此時為0,更改數值試試)
coord.Y=0; // 這里是游標目標位置的縱坐標(此時為0,更改數值試試)
SetConsoleCursorPosition(handle,coord);
-----
控制游標到想要擦出的位置進行擦除還原,再控制游標在想要畫小人的地方畫小人
可以將這一段編為一個函數,方便調用
5. 求一個用C語言編寫的小游戲代碼
#include <graphics.h>
#include <conio.h>
#include <time.h>
/////////////////////////////////////////////
// 定義常量、枚舉量、結構體、全局變數
/////////////////////////////////////////////
#define WIDTH 10 // 游戲區寬度
#define HEIGHT 22 // 游戲區高度
#define SIZE 20 // 每個游戲區單位的實際像素
// 定義操作類型
enum CMD
{
CMD_ROTATE, // 方塊旋轉
CMD_LEFT, CMD_RIGHT, CMD_DOWN, // 方塊左、右、下移動
CMD_SINK, // 方塊沉底
CMD_QUIT // 退出遊戲
};
// 定義繪制方塊的方法
enum DRAW
{
SHOW, // 顯示方塊
HIDE, // 隱藏方塊
FIX // 固定方塊
};
// 定義七種俄羅斯方塊
struct BLOCK
{
WORD dir[4]; // 方塊的四個旋轉狀態
COLORREF color; // 方塊的顏色
} g_Blocks[7] = { {0x0F00, 0x4444, 0x0F00, 0x4444, RED}, // I
{0x0660, 0x0660, 0x0660, 0x0660, BLUE}, // 口
{0x4460, 0x02E0, 0x0622, 0x0740, MAGENTA}, // L
{0x2260, 0x0E20, 0x0644, 0x0470, YELLOW}, // 反L
{0x0C60, 0x2640, 0x0C60, 0x2640, CYAN}, // Z
{0x0360, 0x4620, 0x0360, 0x4620, GREEN}, // 反Z
{0x4E00, 0x4C40, 0x0E40, 0x4640, BROWN}}; // T
// 定義當前方塊、下一個方塊的信息
struct BLOCKINFO
{
byte id; // 方塊 ID
char x, y; // 方塊在游戲區中的坐標
byte dir:2; // 方向
} g_CurBlock, g_NextBlock;
// 定義游戲區
BYTE g_World[WIDTH][HEIGHT] = {0};
/////////////////////////////////////////////
// 函數聲明
/////////////////////////////////////////////
void Init(); // 初始化游戲
void Quit(); // 退出遊戲
void NewGame(); // 開始新游戲
void GameOver(); // 結束游戲
CMD GetCmd(); // 獲取控制命令
void DispatchCmd(CMD _cmd); // 分發控制命令
void NewBlock(); // 生成新的方塊
bool CheckBlock(BLOCKINFO _block); // 檢測指定方塊是否可以放下
void DrawBlock(BLOCKINFO _block, DRAW _draw = SHOW); // 畫方塊
void OnRotate(); // 旋轉方塊
void OnLeft(); // 左移方塊
void OnRight(); // 右移方塊
void OnDown(); // 下移方塊
void OnSink(); // 沉底方塊
/////////////////////////////////////////////
// 函數定義
/////////////////////////////////////////////
// 主函數
void main()
{
Init();
CMD c;
while(true)
{
c = GetCmd();
DispatchCmd(c);
// 按退出時,顯示對話框咨詢用戶是否退出
if (c == CMD_QUIT)
{
HWND wnd = GetHWnd();
if (MessageBox(wnd, _T("您要退出遊戲嗎?"), _T("提醒"), MB_OKCANCEL | MB_ICONQUESTION) == IDOK)
Quit();
}
}
}
// 初始化游戲
void Init()
{
initgraph(640, 480);
srand((unsigned)time(NULL));
// 顯示操作說明
setfont(14, 0, _T("宋體"));
outtextxy(20, 330, _T("操作說明"));
outtextxy(20, 350, _T("上:旋轉"));
outtextxy(20, 370, _T("左:左移"));
outtextxy(20, 390, _T("右:右移"));
outtextxy(20, 410, _T("下:下移"));
outtextxy(20, 430, _T("空格:沉底"));
outtextxy(20, 450, _T("ESC:退出"));
// 設置坐標原點
setorigin(220, 20);
// 繪制游戲區邊界
rectangle(-1, -1, WIDTH * SIZE, HEIGHT * SIZE);
rectangle((WIDTH + 1) * SIZE - 1, -1, (WIDTH + 5) * SIZE, 4 * SIZE);
// 開始新游戲
NewGame();
}
// 退出遊戲
void Quit()
{
closegraph();
exit(0);
}
// 開始新游戲
void NewGame()
{
// 清空游戲區
setfillstyle(BLACK);
bar(0, 0, WIDTH * SIZE - 1, HEIGHT * SIZE - 1);
ZeroMemory(g_World, WIDTH * HEIGHT);
// 生成下一個方塊
g_NextBlock.id = rand() % 7;
g_NextBlock.dir = rand() % 4;
g_NextBlock.x = WIDTH + 1;
g_NextBlock.y = HEIGHT - 1;
// 獲取新方塊
NewBlock();
}
// 結束游戲
void GameOver()
{
HWND wnd = GetHWnd();
if (MessageBox(wnd, _T("游戲結束。\n您想重新來一局嗎?"), _T("游戲結束"), MB_YESNO | MB_ICONQUESTION) == IDYES)
NewGame();
else
Quit();
}
// 獲取控制命令
DWORD m_oldtime;
CMD GetCmd()
{
// 獲取控制值
while(true)
{
// 如果超時,自動下落一格
DWORD newtime = GetTickCount();
if (newtime - m_oldtime >= 500)
{
m_oldtime = newtime;
return CMD_DOWN;
}
// 如果有按鍵,返回按鍵對應的功能
if (kbhit())
{
switch(getch())
{
case 'w':
case 'W': return CMD_ROTATE;
case 'a':
case 'A': return CMD_LEFT;
case 'd':
case 'D': return CMD_RIGHT;
case 's':
case 'S': return CMD_DOWN;
case 27: return CMD_QUIT;
case ' ': return CMD_SINK;
case 0:
case 0xE0:
switch(getch())
{
case 72: return CMD_ROTATE;
case 75: return CMD_LEFT;
case 77: return CMD_RIGHT;
case 80: return CMD_DOWN;
}
}
}
// 延時 (降低 CPU 佔用率)
Sleep(20);
}
}
// 分發控制命令
void DispatchCmd(CMD _cmd)
{
switch(_cmd)
{
case CMD_ROTATE: OnRotate(); break;
case CMD_LEFT: OnLeft(); break;
case CMD_RIGHT: OnRight(); break;
case CMD_DOWN: OnDown(); break;
case CMD_SINK: OnSink(); break;
case CMD_QUIT: break;
}
}
// 生成新的方塊
void NewBlock()
{
g_CurBlock.id = g_NextBlock.id, g_NextBlock.id = rand() % 7;
g_CurBlock.dir = g_NextBlock.dir, g_NextBlock.dir = rand() % 4;
g_CurBlock.x = (WIDTH - 4) / 2;
g_CurBlock.y = HEIGHT + 2;
// 下移新方塊直到有局部顯示
WORD c = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];
while((c & 0xF) == 0)
{
g_CurBlock.y--;
c >>= 4;
}
// 繪制新方塊
DrawBlock(g_CurBlock);
// 繪制下一個方塊
setfillstyle(BLACK);
bar((WIDTH + 1) * SIZE, 0, (WIDTH + 5) * SIZE - 1, 4 * SIZE - 1);
DrawBlock(g_NextBlock);
// 設置計時器,用於判斷自動下落
m_oldtime = GetTickCount();
}
// 畫方塊
void DrawBlock(BLOCKINFO _block, DRAW _draw)
{
WORD b = g_Blocks[_block.id].dir[_block.dir];
int x, y;
int color = BLACK;
switch(_draw)
{
case SHOW: color = g_Blocks[_block.id].color; break;
case HIDE: color = BLACK; break;
case FIX: color = g_Blocks[_block.id].color / 3; break;
}
setfillstyle(color);
for(int i=0; i<16; i++)
{
if (b & 0x8000)
{
x = _block.x + i % 4;
y = _block.y - i / 4;
if (y < HEIGHT)
{
if (_draw != HIDE)
bar3d(x * SIZE + 2, (HEIGHT - y - 1) * SIZE + 2, (x + 1) * SIZE - 4, (HEIGHT - y) * SIZE - 4, 3, true);
else
bar(x * SIZE, (HEIGHT - y - 1) * SIZE, (x + 1) * SIZE - 1, (HEIGHT - y) * SIZE - 1);
}
}
b <<= 1;
}
}
// 檢測指定方塊是否可以放下
bool CheckBlock(BLOCKINFO _block)
{
WORD b = g_Blocks[_block.id].dir[_block.dir];
int x, y;
for(int i=0; i<16; i++)
{
if (b & 0x8000)
{
x = _block.x + i % 4;
y = _block.y - i / 4;
if ((x < 0) || (x >= WIDTH) || (y < 0))
return false;
if ((y < HEIGHT) && (g_World[x][y]))
return false;
}
b <<= 1;
}
return true;
}
// 旋轉方塊
void OnRotate()
{
// 獲取可以旋轉的 x 偏移量
int dx;
BLOCKINFO tmp = g_CurBlock;
tmp.dir++; if (CheckBlock(tmp)) { dx = 0; goto rotate; }
tmp.x = g_CurBlock.x - 1; if (CheckBlock(tmp)) { dx = -1; goto rotate; }
tmp.x = g_CurBlock.x + 1; if (CheckBlock(tmp)) { dx = 1; goto rotate; }
tmp.x = g_CurBlock.x - 2; if (CheckBlock(tmp)) { dx = -2; goto rotate; }
tmp.x = g_CurBlock.x + 2; if (CheckBlock(tmp)) { dx = 2; goto rotate; }
return;
rotate:
// 旋轉
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.dir++;
g_CurBlock.x += dx;
DrawBlock(g_CurBlock);
}
// 左移方塊
void OnLeft()
{
BLOCKINFO tmp = g_CurBlock;
tmp.x--;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.x--;
DrawBlock(g_CurBlock);
}
}
// 右移方塊
void OnRight()
{
BLOCKINFO tmp = g_CurBlock;
tmp.x++;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.x++;
DrawBlock(g_CurBlock);
}
}
// 下移方塊
void OnDown()
{
BLOCKINFO tmp = g_CurBlock;
tmp.y--;
if (CheckBlock(tmp))
{
DrawBlock(g_CurBlock, HIDE);
g_CurBlock.y--;
DrawBlock(g_CurBlock);
}
else
OnSink(); // 不可下移時,執行「沉底方塊」操作
}
// 沉底方塊
void OnSink()
{
int i, x, y;
// 連續下移方塊
DrawBlock(g_CurBlock, HIDE);
BLOCKINFO tmp = g_CurBlock;
tmp.y--;
while (CheckBlock(tmp))
{
g_CurBlock.y--;
tmp.y--;
}
DrawBlock(g_CurBlock, FIX);
// 固定方塊在游戲區
WORD b = g_Blocks[g_CurBlock.id].dir[g_CurBlock.dir];
for(i = 0; i < 16; i++)
{
if (b & 0x8000)
{
if (g_CurBlock.y - i / 4 >= HEIGHT)
{ // 如果方塊的固定位置超出高度,結束游戲
GameOver();
return;
}
else
g_World[g_CurBlock.x + i % 4][g_CurBlock.y - i / 4] = 1;
}
b <<= 1;
}
// 檢查是否需要消掉行,並標記
int row[4] = {0};
bool bRow = false;
for(y = g_CurBlock.y; y >= max(g_CurBlock.y - 3, 0); y--)
{
i = 0;
for(x = 0; x < WIDTH; x++)
if (g_World[x][y] == 1)
i++;
if (i == WIDTH)
{
bRow = true;
row[g_CurBlock.y - y] = 1;
setfillstyle(WHITE, DIAGCROSS2_FILL);
bar(0, (HEIGHT - y - 1) * SIZE + SIZE / 2 - 2, WIDTH * SIZE - 1, (HEIGHT - y - 1) * SIZE + SIZE / 2 + 2);
}
}
if (bRow)
{
// 延時 200 毫秒
Sleep(200);
// 擦掉剛才標記的行
IMAGE img;
for(i = 0; i < 4; i++)
{
if (row[i])
{
for(y = g_CurBlock.y - i + 1; y < HEIGHT; y++)
for(x = 0; x < WIDTH; x++)
{
g_World[x][y - 1] = g_World[x][y];
g_World[x][y] = 0;
}
getimage(&img, 0, 0, WIDTH * SIZE, (HEIGHT - (g_CurBlock.y - i + 1)) * SIZE);
putimage(0, SIZE, &img);
}
}
}
// 產生新方塊
NewBlock();
}
6. C語言小題,這個圖片裡面的小人是輸出,怎麼用C語言讓這個小人從右往左移動呢
其實就是輸出4行數據。
前面有若干個空格。所以要想讓它移動的話,執行兩步
清屏
重新輸出4行數據,每行前面空格減少一位。
這樣就向左移動了一位了。
循環執行 就是不停向左,類似的 還可以上下右移動。
7. 用C語言畫簡單的小人
TC2.0里有一個bgidemo.c的圖形編程示常式序。
其中有一個演示屏幕貼圖的子程序,一個外星人的飛船在屏幕上飛來飛去。
這個程序可以簡單地修改一下就可以用於你的需求了。
程序不難看懂。
這個代碼我找到了。大概說一下。LZ需要自己去找一下完整的代碼研究,這里我只貼出相關的一段。
void PutImageDemo(void)
{
static int r = 20;
static int StartX = 100;
static int StartY = 50;
struct viewporttype vp;
int PauseTime, x, y, ulx, uly, lrx, lry, size, i, width, height, step;
void *Saucer;
MainWindow("GetImage / PutImage Demonstration");
getviewsettings( &vp );
/* Draw Saucer */ 下面是用繪畫的方式畫了一個簡單的飛碟。這個飛碟圖用於之前復制到內存里備用。
setfillstyle( SOLID_FILL, getmaxcolor() );
fillellipse(StartX, StartY, r, (r/3)+2);
ellipse(StartX, StartY-4, 190, 357, r, r/3);
line(StartX+7, StartY-6, StartX+10, StartY-12);
circle(StartX+10, StartY-12, 2);
line(StartX-7, StartY-6, StartX-10, StartY-12);
circle(StartX-10, StartY-12, 2);
/* Read saucer image */ 這里開始把那個飛碟的小圖圖復制到一個內存緩沖區里。先計算大小,需要的內存大小。
ulx = StartX-(r+1);
uly = StartY-14;
lrx = StartX+(r+1);
lry = StartY+(r/3)+3;
width = lrx - ulx + 1;
height = lry - uly + 1;
size = imagesize(ulx, uly, lrx, lry);
Saucer = malloc( size ); // 分配內存
getimage(ulx, uly, lrx, lry, Saucer); // 搞到了。
putimage(ulx, uly, Saucer, XOR_PUT); // 這就在原位置上,以異或的方式畫一下。用異或的方式繪圖,兩次繪制後,圖像正好就會消失為原來的背景。
但是,LZ的可能這樣不行,那就需要復雜一些的繪制了,用人物的黑輪廓圖或上背景,得到鏤空,然後再把黑背景的角色用or方式繪上。
下面就是隨機地繪制了。
/* Plot some "stars" */
for ( i=0 ; i<1000; ++i )
putpixel(random(MaxX), random(MaxY), random( MaxColors-1 )+1);
x = MaxX / 2;
y = MaxY / 2;
PauseTime = 70;
/* until a key is hit */
while ( !kbhit() ) {
/* Draw the Saucer */
putimage(x, y, Saucer, XOR_PUT); /* draw image */
delay(PauseTime);
putimage(x, y, Saucer, XOR_PUT); /* erase image */
上面的還是兩次 xor,顯示圖片,消除圖片。
/* Move Saucer */
step = random( 2*r );
if ((step/2) % 2 != 0 )
step = -1 * step;
x = x + step;
step = random( r );
if ((step/2) % 2 != 0 )
step = -1 * step;
y = y + step;
if (vp.left + x + width - 1 > vp.right)
x = vp.right-vp.left-width + 1;
else
if (x < 0)
x = 0;
if (vp.top + y + height - 1 > vp.bottom)
y = vp.bottom-vp.top-height + 1;
else
if (y < 0)
y = 0;
}
free( Saucer );
Pause();
}
另外,團IDC網上有許多產品團購,便宜有口碑
8. C語言運動的小人
多了一個最後的大括弧}。
編寫程序請養成縮格書寫的習慣!
9. 如何利用c語言實現像素圖形的輸出
1、可以變成灰度圖也可以不變。這里假設你的圖像都是IPL_DEPTH_8U類型。
2、如果變成灰度圖,就是單通道圖像,獲取的就是每一個像素點的灰度值。
IplImage* img = cvLoadImage("test.bmp", 0);
for (int i = 0; i < img->height; i++)
{
for (int j = 0; j < img->width; j++)
{
//方法一:使用cvGet2D()函數間接訪問
CvScalar s = cvGet2D(img, i, j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。
printf("gray value=%f\n",s.val[0]);
//方法二:使用直接訪問
uchar val = ((uchar *)(img->imageData + i*img->widthStep))[j]; //i和j的意義同上
printf("gray value=%d\n",val);
}
}
3、如果不變成灰度圖,就是3通道圖像,獲取的就是每一個像素點的BGR值,然後分別獲取B值,G值和R值。
IplImage* img = cvLoadImage("test.bmp", 1);
for (int i = 0; i < img->height; i++)
{
for (int j = 0; j < img->width; j++)
{
//方法一:使用cvGet2D()函數間接訪問
CvScalar s=cvGet2D(img,i,j); //其中i代表y軸(第i行),即height;j代表x軸(第j列),即width。
printf("B=%f, G=%f, R=%f\n",s.val[0],s.val[1],s.val[2]); //注意是BGR順序
//方法二:使用直接訪問
int bVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 0]; // B
int gVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 1]; // G
int rVal = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels + 2]; // R
printf("B=%d, G=%d, R=%d\n",bVal,gVal,rVal); //注意是BGR順序
}
}
10. 哪位大神有c語言做的小人的代碼,什麼小人都可以,什麼叮當貓hellokitty
#include<stdio.h>
intmain(){
char*s[]={"______________$$$$$$$",
"_____________$$$$$$$$$",
"____________$$$$$$$$$$$",
"____________$$$$$$$$$$$",
"____________$$$$$$$$$$$",
"_____________$$$$$$$$$",
"_____$$$$$$_____$$$$$$$$$$",
"____$$$$$$$$__$$$$$$_____$$$",
"___$$$$$$$$$$$$$$$$_________$",
"___$$$$$$$$$$$$$$$$______$__$",
"___$$$$$$$$$$$$$$$$_____$$$_$",
"___$$$$$$$$$$$__________$$$_$_____$$",
"____$$$$$$$$$____________$$_$$$$_$$$$",
"______$$$__$$__$$$______________$$$$",
"___________$$____$_______________$",
"____________$$____$______________$",
"_____________$$___$$$__________$$",
"_______________$$$_$$$$$$_$$$$$",
"________________$$____$$_$$$$$",
"_______________$$$$$___$$$$$$$$$$",
"_______________$$$$$$$$$$$$$$$$$$$$",
"_______________$$_$$$$$$$$$$$$$$__$$",
"_______________$$__$$$$$$$$$$$___$_$",
"______________$$$__$___$$$______$$$$",
"______________$$$_$__________$$_$$$$",
"______________$$$$$_________$$$$_$_$",
"_______________$$$$__________$$$__$$",
"_____$$$$_________$________________$",
"___$$$___$$______$$$_____________$$",
"__$___$$__$$_____$__$$$_____$$__$$",
"_$$____$___$_______$$$$$$$$$$$$$",
"_$_____$____$_____$$$$$$__$$$$$$$$"};
intLENGTH=32;
inti=0;
for(i=0;i<LENGTH;i++){
printf("%s ",s[i]);
}
}