久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4761|回復: 8
打印 上一主題 下一主題
收起左側

c語言貪吃蛇

[復制鏈接]
跳轉到指定樓層
樓主
ID:51090 發表于 2014-9-17 14:53 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 xiaojuan 于 2014-9-17 14:55 編輯

#include<stdio.h>  //頭文件 上傳會自動去掉 請大家手動加上

void init ();

int main (void)
{
init();
return 0;
}

void init ()
{
int nIndex = 0;
int nRow = 20;
int nColumn = 44;
int nRowIndex = 0;

for (nIndex = 1; nIndex <= nColumn; nIndex++)
  printf ("*");
printf ("\n");
for (nRowIndex = 1; nRowIndex <=nRow-2; nRowIndex++)
{
  for (nIndex = 1; nIndex <=nColumn; nIndex++)
  {
   if (nIndex==1  ||  nIndex == nColumn)    //這句的選擇很漂亮
   {
    printf ("*");
   }
   else
   {
    printf (" ");
   }
  }
  printf ("\n");
}
// printf ("\n");
for (nIndex = 1; nIndex <= nColumn; nIndex++)
  printf ("*");
printf ("\n");
}

評分

參與人數 1黑幣 +5 收起 理由
lytcl + 5 贊一個!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:51090 發表于 2014-9-17 14:53 | 只看該作者
本帖最后由 xiaojuan 于 2014-9-17 15:02 編輯

#include<stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
int main (void)
{
COORD dwCursorPosition;

HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);  //將函數與命名放在一塊了,相當于HANDLE hOutput; hOutput = GetStdHandle(STD_OUTPUT_HANDLE);

if (INVALID_HANDLE_VALUE == hOutput)
{
  printf ("GetStdHandle error!\n");
  return -1;        //跳出,顯示錯誤
}


dwCursorPosition.X = 1;      //列
dwCursorPosition.Y = 10;     //行

if (!SetConsoleCursorPosition(hOutput, dwCursorPosition))//!給的很有味道
{
  printf ("SetConsoleCursorPosition!\n");
  return -1;
}
printf ("Hello, world!\n");
return 0;
}
回復

使用道具 舉報

板凳
ID:51090 發表于 2014-9-17 14:54 | 只看該作者
本帖最后由 xiaojuan 于 2014-9-17 15:02 編輯


有些注釋搞不出來很無語

#include<stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
int changeCursor(int nX, int nY);
bool drawFrame(int nXStart, int nYStart, int nCol, int nRow);

int main (int argc, char ** argv)
{
int nCol = 30;
int nRow = 15;
//畫出兩個格子
drawFrame(2,5,nCol,nRow);    //畫出格子
drawFrame(36,5,nCol,nRow);    //畫出格子


printf ("\n\n\n\n\n");
return 0;
}

int changeCursor(int nX, int nY)
{
COORD dwCursorPosition;

HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); //  hOutput = GetStdHandle(STD_OUTPUT_HANDLE);

if (INVALID_HANDLE_VALUE == hOutput)
{
  printf ("GetStdHandle error!\n");
  return -1;        
}


dwCursorPosition.X = nX;      //列
dwCursorPosition.Y = nY;     //行

if (!SetConsoleCursorPosition(hOutput, dwCursorPosition))//!給的很有味道
{
  printf ("SetConsoleCursorPosition!\n");
  return -1;
}
}


bool drawFrame(int nXStart, int nYStart, int nCol, int nRow) //設定所設的邊框的起始位置與邊框的大小
{
int nColindex = 0;
int nRowindex = 0;

if (nXStart % 2 == 1  || nCol%2 == 1)    //因為我們采用的■是中文字符,中文字符占用兩個字節,所以要使初始位是偶數,結束位也是偶數
  return false;

if (!(nXStart  >= 0 && nXStart + nCol <80
  && nYStart >= 0 && nYStart + nRow <80))   //設定方塊起始位置與終止位置的所在的方框邊緣
  return false;

changeCursor(nXStart, nYStart);
for (nColindex = 1; nColindex <= nCol/2+1; nColindex++)
   printf ("■");
printf ("\n");

changeCursor(nXStart + 3, nYStart + 6);
printf ("Hello world!!!");

for(nRowindex = 1; nRowindex <= nRow; nRowindex++)
{

    changeCursor(nXStart  , nYStart + nRowindex);    //出位置
    printf("■");
    changeCursor(nXStart + nCol , nYStart + nRowindex);    //末位置
    printf("■");

}

changeCursor(nXStart, nYStart + nRowindex);
for (nColindex = 1; nColindex <= nCol/2+1; nColindex++)
  printf ("■");
printf ("\n");
}
回復

使用道具 舉報

地板
ID:51090 發表于 2014-9-17 14:54 | 只看該作者


       第一次開始模塊化編程,先說下方法,其他的以后再補充



       建立一個工作區間過后,會自動出現
貪吃蛇lesson_4這樣的一個方框,然后新建幾個.c和.h文件,這幾個文件會自動歸類到幾個文件夾里面
       .h這個文件主要作用是進行函數的聲明,就是把你在main.c這個主函數里面所需要的函數寫里面
__________________________________________________________________________________________________________________
      貪吃蛇里面的game.h文件內容
                                      BOOL init();
                                      BOOL isContinue();
                                      BOOL clean();
                                      BOOL input();
                                      BOOL step();
                                      BOOL draw();
因為C語言不接受bool  所以要用BOOL
華麗麗的分割線,最喜歡這玩意了,代表著一個的結束
___________________________________________________________________________________________________________________
然后在game.c文件夾中寫函數里面的內容
                         根據在這個函數里面用到的庫函數,在上面進行聲明
                         貪吃蛇用到的
                                             # include
                                             # include
                        因為game.c這個里面主要做的就是將.h文件夾里面的函數進行解釋
                                         所以加 # include "game.h"
___________________________________________________________________________________________________________________
最后是main.c
           這個文件里面主要是對game.c里面的的進行調用
                                      所以應該加# include "game.h"
           main.c里面的內容要從簡,只寫需要的就好了
                                  int main (int argc, char ** argv)
                               {
                                           init ();
                                           while (isContinue())
                                           {
                                                     clean ();
                                                     input ();
                                                     if (step ())
                                                    draw ();
                                                    Sleep (500);
                                                    }
回復

使用道具 舉報

5#
ID:51090 發表于 2014-9-17 14:54 | 只看該作者
本帖最后由 xiaojuan 于 2014-9-17 15:03 編輯


     額,這個,今天感覺實在是太亂了,不知道從哪開始,先分割線調整下

——————————————————————————————————————————————



今天的貪吃蛇程序是這樣的吧,感覺還是喲個順序問題,開始程序是一條蛇在一個DOS中運行,然后開始寫多條,多條就是建立一個結構體,這樣就可以設置多個了,然后在考慮多畫幾個圖出來

——————————————————————————————————————————————game.c文件




#include<stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>

// 自寫庫
# include "game.h"


int changeCursor(int nX, int nY)
{
COORD dwCursorPosition;

HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); //  hOutput = GetStdHandle(STD_OUTPUT_HANDLE);

if (INVALID_HANDLE_VALUE == hOutput)
{
  printf ("GetStdHandle error!\n");
  return -1;        
}


dwCursorPosition.X = nX;      //列
dwCursorPosition.Y = nY;     //行

if (!SetConsoleCursorPosition(hOutput, dwCursorPosition))//!給的很有味道
{
  printf ("SetConsoleCursorPosition!\n");
  return -1;
}
}


BOOL drawFrame(int nXStart, int nYStart, int nCol, int nRow) //設定所設的邊框的起始位置與邊框的大小
{
int nColindex = 0;
int nRowindex = 0;

if (nXStart % 2 == 1  || nCol%2 == 1)    //因為我們采用的■是中文字符,中文字符占用兩個字節,所以要使初始位是偶數,結束位也是偶數
  return FALSE;

if (!(nXStart  >= 0 && nXStart + nCol <80   //!用的需要學下
  && nYStart >= 0 && nYStart + nRow <80))   //設定方塊起始位置與終止位置的所在的方框邊緣
  return FALSE;

nCol /= 2;
changeCursor(nXStart, nYStart);
for (nColindex = 1; nColindex <= nCol; nColindex++)
   printf ("¤");
printf ("\n");

changeCursor(nXStart + 5, nYStart + 3);
// printf ("guanguan a donkey");

for(nRowindex = 1; nRowindex <= nRow-2; nRowindex++)
{

    changeCursor(nXStart  , nYStart + nRowindex);    //出位置
    printf("¤");
    changeCursor(nXStart+(nCol-1)*2, nYStart + nRowindex);    //末位置
    printf("¤");

}

changeCursor(nXStart, nYStart + nRow-1);
for (nColindex = 1; nColindex <= nCol; nColindex++)
  printf ("¤");
printf ("\n");
}

//  設定邊框的大小    //

//不加typedef就是相當于給這個結構體起了個名字叫 g_frame;
typedef struct
{
int nLeft;
int nTop;
int nHeight;
int nWidth;
}StuFrame;  //g開頭全局變量


//設定貪吃蛇的起始位置和蛇的大小 //

//typedef 是給一個變量從新起了個名字typedef long byte_4; 給已知數據類型long起個新名字,叫byte_4。

typedef struct StuPoint
{
int nX;
int nY;
} StuPoint;

typedef enum _EN_DIRECTION
{
EN_UP,
EN_DOWN,
EN_LEFT,
EN_RIGHT,
} EN_DIRECTION;

typedef struct _StuSnake
{
StuFrame frame;
StuPoint snake[100];
int nSnakeLen;
EN_DIRECTION enDirection;
BOOL bContinue;
} StuSnake;

StuSnake g_snake[10];
int g_nSnakeLen = 0;

BOOL init_snake(StuSnake *pSnake,
    int nLeft, int nTop,
    int nWidth, int nHeight)
{

(*pSnake).frame.nLeft = nLeft;
(*pSnake).frame.nTop = nTop;
(*pSnake).frame.nHeight = nHeight;
(*pSnake).frame.nWidth = nWidth;
//面述方格里面一共有多少格子
// StuPoint *matrixPoint = (StuPoint *)malloc(sizeof(g_frame.nHeight-2)*g_frame.nWidth-2));
drawFrame(nLeft, nTop,
     nWidth,  nHeight);    //畫出格子
//初始化小蛇的位置

(*pSnake).nSnakeLen = 3;
(*pSnake).snake[0].nX = ((*pSnake).frame.nLeft+2) + 0*2;
(*pSnake).snake[0].nY = (*pSnake).frame.nTop + (*pSnake).frame.nHeight/2;
(*pSnake).snake[1].nX = ((*pSnake).frame.nLeft+2) + 1*2;
(*pSnake).snake[1].nY = (*pSnake).frame.nTop + (*pSnake).frame.nHeight/2;
(*pSnake).snake[2].nX = ((*pSnake).frame.nLeft+2) + 2*2;
(*pSnake).snake[2].nY = (*pSnake).frame.nTop + (*pSnake).frame.nHeight/2;

(*pSnake).bContinue = TRUE;
(*pSnake).enDirection = EN_RIGHT;
}



BOOL init()
{
   //下面五個數據不再是全局變量,只能在這個地方在初始化
init_snake(&g_snake[0], 28, 5, 20, 9);
init_snake(&g_snake[1], 4, 2, 20, 9);
init_snake(&g_snake[2], 50, 12, 20, 9);

g_nSnakeLen = 3;    //蛇的個數
  // drawFrame(36,5,nCol,nRow);    //畫出格子

return TRUE;
}
BOOL isContinue()
{
return g_snake[0].bContinue;
}

BOOL input( )
{
int nSnakeIndex = 0;
char c = '0';
if (kbhit())
  c = getch ();

for (nSnakeIndex = 0; nSnakeIndex< g_nSnakeLen; nSnakeIndex++)
{
  switch (c)
  {
   case 'w':
    if (EN_UP == g_snake[nSnakeIndex].enDirection
     || EN_DOWN == g_snake[nSnakeIndex].enDirection)  //在直線方向的時候按上下鍵沒有反應
     break;
    g_snake[nSnakeIndex].enDirection = EN_UP;
    break;
   case 's':
    if (EN_UP == g_snake[nSnakeIndex].enDirection
     || EN_DOWN == g_snake[nSnakeIndex].enDirection)  //在直線方向的時候按上下鍵沒有反應
     break;
    g_snake[nSnakeIndex].enDirection = EN_DOWN;
    break;
   case 'a':
    if (EN_LEFT == g_snake[nSnakeIndex].enDirection
     || EN_RIGHT == g_snake[nSnakeIndex].enDirection)  //在水平方向的時候按左右鍵沒有反應
     break;
    g_snake[nSnakeIndex].enDirection = EN_LEFT;
    break;
   case 'd':
    if (EN_LEFT == g_snake[nSnakeIndex].enDirection
     || EN_RIGHT == g_snake[nSnakeIndex].enDirection)  //在水平方向的時候按左右鍵沒有反應
     break;
    g_snake[nSnakeIndex].enDirection = EN_RIGHT;
    break;
   default:
    break;
  }
}
return TRUE;
}

BOOL clean()
{
int nSnakeIndex = 0;
int nIndex = 0;

for (nSnakeIndex = 0; nSnakeIndex< g_nSnakeLen; nSnakeIndex++)
{
  for (nIndex = 0; nIndex < g_snake[nSnakeIndex].nSnakeLen; nIndex++)
  {
   changeCursor(g_snake[nSnakeIndex].snake[nIndex].nX, g_snake[nSnakeIndex].snake[nIndex].nY);
    printf ("  ");
  }
}
return TRUE;
}

BOOL step()
{
int nIndex = 0;
int nSnakeIndex = 0;

for (nSnakeIndex = 0; nSnakeIndex< g_nSnakeLen; nSnakeIndex++)
{
  for (nIndex = 0; nIndex < g_snake[nSnakeIndex].nSnakeLen-1; nIndex++)
  { //后一個坐標移到前一個坐標
   g_snake[nSnakeIndex].snake[nIndex].nX = g_snake[nSnakeIndex].snake[nIndex+1].nX;  //下標為1的坐標移到下標為0的坐標
   g_snake[nSnakeIndex].snake[nIndex].nY = g_snake[nSnakeIndex].snake[nIndex+1].nY;
  }
  switch (g_snake[nSnakeIndex].enDirection)
  {
  case EN_UP:
    g_snake[nSnakeIndex].snake[g_snake[nSnakeIndex].nSnakeLen - 1].nY -= 1;
   break;
  case EN_DOWN:
    g_snake[nSnakeIndex].snake[g_snake[nSnakeIndex].nSnakeLen - 1].nY += 1;
   break;
  case EN_LEFT:
    g_snake[nSnakeIndex].snake[g_snake[nSnakeIndex].nSnakeLen - 1].nX -= 2;
   break;
  case EN_RIGHT:
    g_snake[nSnakeIndex].snake[g_snake[nSnakeIndex].nSnakeLen - 1].nX += 2;
   break;
  }
  
  //touch frame   計算貌似還是有點問題
  if (g_snake[nSnakeIndex].snake[g_snake[nSnakeIndex].nSnakeLen - 1].nY >= g_snake[nSnakeIndex].frame.nTop + g_snake[nSnakeIndex].frame.nHeight-1
   ||g_snake[nSnakeIndex].snake[g_snake[nSnakeIndex].nSnakeLen - 1].nY < g_snake[nSnakeIndex].frame.nTop
   ||g_snake[nSnakeIndex].snake[g_snake[nSnakeIndex].nSnakeLen - 1].nX > g_snake[nSnakeIndex].frame.nLeft + g_snake[nSnakeIndex].frame.nWidth - 2
   ||g_snake[nSnakeIndex].snake[g_snake[nSnakeIndex].nSnakeLen - 1].nX < g_snake[nSnakeIndex].frame.nLeft)
  {
   g_snake[nSnakeIndex].bContinue = FALSE;
  // changeCursor(14, 12);
   printf ("YOU ARE LOST");
  // init ();
  // printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
  // return FALSE;
  }
}
return TRUE;
}

BOOL draw()
{
int nIndex = 0;
int nSnakeIndex = 0;
for (nSnakeIndex = 0; nSnakeIndex< g_nSnakeLen; nSnakeIndex++)
{
  for (nIndex = 0; nIndex < g_snake[nSnakeIndex].nSnakeLen; nIndex++)
  {
   changeCursor(g_snake[nSnakeIndex].snake[nIndex].nX, g_snake[nSnakeIndex].snake[nIndex].nY);
    printf ("■");
  }

}
return TRUE;
}
回復

使用道具 舉報

6#
ID:156587 發表于 2017-2-7 22:31 | 只看該作者
這個貼子真是厲害啊,慢慢研究
回復

使用道具 舉報

7#
ID:227363 發表于 2017-8-13 09:35 | 只看該作者
太棒了
回復

使用道具 舉報

8#
ID:227363 發表于 2017-8-13 09:35 | 只看該作者
值得一看
回復

使用道具 舉報

9#
ID:244671 發表于 2017-10-31 19:14 | 只看該作者
感謝樓主
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 97高清国语自产拍 | 国产日韩欧美另类 | www日本在线 | 久久精品日产第一区二区三区 | 国产农村妇女精品一区 | 日韩成人 | 亚洲一区二区三区在线 | 欧美九九九 | 97久久久久久久久 | 欧美日韩亚洲系列 | 精品伊人 | 精品av天堂毛片久久久借种 | 欧美一区二区三区在线观看 | 亚洲一区二区久久 | 亚洲一区中文字幕在线观看 | 97超在线视频 | 中文字幕精品一区 | 免费看91| 动漫www.被爆羞羞av44 | 国产女人叫床高潮大片免费 | 国产精品一区二区三区在线播放 | 丁香婷婷久久久综合精品国产 | 在线观看www高清视频 | 三级黄色网址 | 国产成人在线一区二区 | 久久99久久 | 精品一区二区久久久久久久网站 | 亚洲成人福利在线观看 | 国产一区二区影院 | 日本天天操| 免费毛片www com cn | 伊人网站在线观看 | 岛国av一区二区三区 | 欧美一区二区三区在线看 | 欧美日韩亚洲成人 | 黄免费在线 | 精品欧美乱码久久久久久 | 久久久青草婷婷精品综合日韩 | 美女福利视频一区 | 99久久国产综合精品麻豆 | 精品视频久久久久久 |