本文目錄一覽:
用C語言數據結構做個遊戲或系統
#include stdio.h
#include graphics.h
#include stdlib.h
#include dos.h
/*
* 本遊戲中的食物由一個小方格表示
* 本遊戲中的蛇由多個小方格組成(最少兩個)
* 在遊戲的進行過程中,蛇每吃一格食物,則長度將增加一節(即一個小方格)
*/
/*
* 該宏定義蛇的最大節數
*/
#define SNAKE_MAX_LEN 300
/*
* 定義遊戲畫面在屏幕中的位置
*/
#define F_LEFT 50
#define F_TOP 40
#define F_RIGHT 609
#define F_BOTTOM 459
/*
* 牆壁的厚度
*/
#define QB_WIDTH 10
/*
* 表示食物、蛇的小方格的大小
*/
#define XFG_WIDTH 10
/*
* 蛇的活動區域內橫向、縱向可擺放小方格的個數
*/
#define NUM_H ( (F_RIGHT-F_LEFT+1-2*QB_WIDTH)/XFG_WIDTH )
#define NUM_V ( (F_BOTTOM-F_TOP+1-2*QB_WIDTH)/XFG_WIDTH )
/*
* 注: 在設計上面宏的時候,必須滿足:
* (1) 在屏幕分別率允許的範圍內
* (2) (F_RIGHT-F_LEFT+1-2*QB_WIDTH)/XFG_WIDTH 必須能整除
* (3) (F_BOTTOM-F_TOP+1-2*QB_WIDTH)/XFG_WIDTH 必須能整除
*/
/*
* 將在蛇的活動區內以小方格為單位的坐標轉換成屏幕的像素坐標
*/
#define X_to_x(x) ( (x) * XFG_WIDTH + (F_LEFT+QB_WIDTH) )
#define Y_to_y(y) ( (y) * XFG_WIDTH + (F_TOP+QB_WIDTH) )
/*
* 分別定義 蛇、食物、牆壁的顏色
*/
#define SNAKE_COLOR RED
#define FOOD_COLOR GREEN
#define QB_COLOR LIGHTCYAN
/*
* 定義按鍵掃描碼
*/
#define K_LEFT 0x4b00
#define K_RIGHT 0x4d00
#define K_DOWN 0x5000
#define K_UP 0x4800
#define K_ESC 0x011b
/*
* 定義蛇移動的方向
*/
#define MOVE_RIGHT 1
#define MOVE_LEFT 2
#define MOVE_UP 3
#define MOVE_DOWN 4
int score=0; /* 得分 */
int gamespeed=50000; /* 遊戲速度 */
/*
* 食物的屬性
*/
struct {
int x; /* 表示食物小方格左上角的橫坐標 */
int y; /* 表示食物小方格左上角的縱坐標 */
int yes; /* 是否要出現食物 */
/* 1 表示需要出現新食物, 0 表示已經存在食物 */
}food;
/*
* 蛇的屬性
*/
struct {
/*
* 每個小方格左上角的橫坐標(x)、縱坐標(y)
*/
int x[SNAKE_MAX_LEN];
int y[SNAKE_MAX_LEN];
int node; /* 蛇的節數 */
int direction; /* 蛇移動方向 */
}snake;
/*圖形驅動*/
void MyInitGraph(void)
{
int GraphDriver; /* 圖形設備驅動程序 */
int GraphMode; /* 圖形設備模式 */
GraphDriver = DETECT; /* 請求自動檢測 */
initgraph( GraphDriver, GraphMode, “” );
cleardevice();
}
/*圖形結束*/
void MyCloseGraph(void)
{
closegraph();
}
/* 輸出字符串*/
void PrintString(const char *str)
{
setfillstyle(SOLID_FILL,YELLOW);
bar(F_LEFT,F_TOP-20,F_RIGHT,F_TOP-20+15);
setcolor(BROWN);
settextstyle(DEFAULT_FONT,0,1);
outtextxy(F_LEFT+5,F_TOP-20+5,str);
}
/*
* 遊戲畫面,左上角坐標為(F_LEFT,F_TOP),右下角坐標為(F_RIGHT,F_BOTTOM)的圍牆
*/
void DrawForm(void)
{
int i;
char str[100];
setcolor(QB_COLOR);
setlinestyle(SOLID_LINE,0,NORM_WIDTH); /* 設置線型 */
for(i=F_LEFT;i=F_RIGHT-QB_WIDTH+1;i+=QB_WIDTH){
/*
* 在屏幕的上邊和下邊分別畫 56 個緊挨着的小矩形
* 小矩形的高寬都分別為10 個像素
*/
rectangle(i, F_TOP, i+QB_WIDTH-1, F_TOP+QB_WIDTH-1);
rectangle(i,F_BOTTOM-QB_WIDTH+1, i+QB_WIDTH-1, F_BOTTOM);
}
for(i=F_TOP;i=F_BOTTOM-QB_WIDTH+1;i+=QB_WIDTH){
/*
* 在屏幕的左邊和右邊分別畫 42 個緊挨着的小矩形
* 小矩形的高寬都分別為10 個像素
*/
rectangle( F_LEFT,i, F_LEFT+QB_WIDTH-1, i+QB_WIDTH-1);
rectangle(F_RIGHT-QB_WIDTH+1,i, F_RIGHT, i+QB_WIDTH-1);
}
PrintString(“Please Press A Key to play the game!”);
while( kbhit() ){
/*
* NULL
*/
}
bioskey(0);
}
/*
* 根據按鍵內容,改變蛇的運動方向
*/
void change_direction_by_key(int key)
{
if( key==K_UP){
if( snake.direction!=MOVE_DOWN ){
snake.direction = MOVE_UP;
}
}else if( key==K_RIGHT ){
if( snake.direction!=MOVE_LEFT ){
snake.direction = MOVE_RIGHT;
}
}else if( key==K_LEFT ){
if( snake.direction!=MOVE_RIGHT ){
snake.direction = MOVE_LEFT;
}
}else if( key==K_DOWN ){
if( snake.direction!=MOVE_UP ){
snake.direction = MOVE_DOWN;
}
}
}
/*輸出成績*/
void PrintScore(/*int score*/)
{
char str[20];
sprintf(str,”score:%d”,score);
PrintString(str);
}
/*遊戲結束*/
void GameOver(void)
{
cleardevice();
PrintScore();
setcolor(RED);
settextstyle(0,0,4);
outtextxy(200,200,”GAME OVER”);
getch();
}
/*
* 生成一個新的食物
* 在圍牆內隨機生成新食物的坐標
*/
void Make_A_Food()
{
food.x = X_to_x( rand() % NUM_H );
food.y = Y_to_y( rand() % NUM_V );
}
/*
* 在畫面上顯示食物
*/
void DispFood(void)
{
setcolor(FOOD_COLOR);
rectangle(food.x,food.y,food.x+XFG_WIDTH-1,food.y+XFG_WIDTH-1);
}
/*
* 蛇的每個小方格往前移動一格
*/
void move_snake(void)
{
int i;
/*
* 在畫面上抹去蛇的最後一節
*/
setcolor(BLACK);
rectangle(snake.x[snake.node-1],snake.y[snake.node-1],snake.x[snake.node-1]+XFG_WIDTH-1,snake.y[snake.node-1]+XFG_WIDTH-1);
/*
* 根據蛇的移動方向計算蛇的每個小方格的坐標
*/
for(i=snake.node-1;i0;i–){
snake.x[i]=snake.x[i-1];
snake.y[i]=snake.y[i-1];
}
switch( snake.direction ){
case MOVE_RIGHT: snake.x[0] += XFG_WIDTH; break;
case MOVE_LEFT: snake.x[0] -= XFG_WIDTH; break;
case MOVE_UP: snake.y[0] -= XFG_WIDTH; break;
case MOVE_DOWN: snake.y[0] += XFG_WIDTH; break;
}
/*
* 在畫面上按移動後的坐標畫出蛇的第一節
*/
setcolor(SNAKE_COLOR);
rectangle(snake.x[0],snake.y[0],snake.x[0]+XFG_WIDTH-1,snake.y[0]+XFG_WIDTH-1);
/*
for(i=0;isnake.node;i++)
rectangle(snake.x[i],snake.y[i],snake.x[i]+XFG_WIDTH-1,snake.y[i]+XFG_WIDTH-1);
*/
}
/*
* 將蛇的身體長一節
* 且新的一節先放在原最後一節的位置,下次循環就正常了
*/
可以用C語言編寫遊戲嗎
可以用C語言編寫遊戲的。
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
儘管C語言提供了許多低級處理的功能,但仍然保持着良好跨平台的特性,以一個標準規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
C語言編程:編寫一個猜數的遊戲,系統自動產生一個
static void Main(string[] args){string i = null;do{Console.Write(“請輸入一個整數(範圍為1~100)\n如果要退出,請輸入0!否則輸入1!”);i = Console.ReadLine();if (i.Trim().Equals(“0”)){return;}} while (!i.Trim().Equals(“1”));start:Random ra = new Random();int rndInt = ra.Next(1, 100);int input = 0;do{Console.Write(“輸入你猜的數值:”);i = Console.ReadLine();if (!int.TryParse(i, out input)){continue;}if (input rndInt){Console.Write(“猜大了\n\n”);}else if (input rndInt){Console.Write(“猜小了\n\n”);}} while (input != rndInt);Console.Write(“恭喜你,猜對了!\n\n”);do{Console.Write(“若繼續猜測輸入Y,若退出則輸入N!\n請輸入:”);i = Console.ReadLine();if (i.Trim().Equals(“n”, StringComparison.OrdinalIgnoreCase)){return;}if (i.Trim().Equals(“y”, StringComparison.OrdinalIgnoreCase)){goto start;}} while (!i.Trim().Equals(“1”));}
有C語言基礎想開發遊戲,還需要學哪些
你可以先去【繪學霸】網站找「遊戲特效/unity3D」板塊的【免費】視頻教程-【點擊進入】完整入門到精通視頻教程列表: ;tagid=305,306zdhhr-11y17r-694997618062854084
想要系統的學習可以考慮報一個網絡直播課,推薦CGWANG的網絡課。老師講得細,上完還可以回看,還有同類型錄播課可以免費學(贈送終身VIP)。
自制能力相對較弱的話,建議還是去好點的培訓機構,實力和規模在國內排名前幾的大機構,推薦行業龍頭:王氏教育。
王氏教育全國直營校區面授課程試聽【複製後面鏈接在瀏覽器也可打開】:
在「遊戲特效/unity3D」領域的培訓機構里,【王氏教育】是國內的老大,且沒有加盟分校,都是總部直營的連鎖校區。跟很多其它同類型大機構不一樣的是:王氏教育每個校區都是實體面授,老師是手把手教,而且有專門的班主任從早盯到晚,爆肝式的學習模式,提升會很快,特別適合基礎差的學生。
大家可以先把【繪學霸】APP下載到自己手機,方便碎片時間學習——繪學霸APP下載:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/257828.html