想写个贪吃蛇

wenbo228228 2014-06-13 03:48:41
学c3个月了,知道了些基本的知识,想通过一个具体的项目来检查下自己的掌握程度以及不足之处,所以想写个经典的贪吃蛇。但是我连在哪里写都不知道,贪吃蛇是有图形界面的,在我的印象中c语言就一个黑窗口,我百度知道需要图形驱动,但是觉得turbo太老了,我用codeblocks,有木有方便点的驱动啊?我希望用新的,简单点的。另外应该有更方便的写小游戏的环境吧,大家知不知道基于c语言的游戏开发软件?
...全文
206 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenbo228228 2014-06-14
  • 打赏
  • 举报
回复
怎么老是弹出垃圾网页?我们域名被盗了吗?
wenbo228228 2014-06-14
  • 打赏
  • 举报
回复
我主要想知道图形界面怎么实现,我用的codeblocks
M阳光 2014-06-14
  • 打赏
  • 举报
回复
引用 8 楼 wenbo228228 的回复:
我主要想知道图形界面怎么实现,我用的codeblocks
http://www.oschina.net/code/snippet_945741_20644
还差得远呢 2014-06-13
  • 打赏
  • 举报
回复
楼主可以参考这个帖子里的代码,不过是linux里的,也是用C语言写的。 http://bbs.csdn.net/topics/350080780
707wk 2014-06-13
  • 打赏
  • 举报
回复
我直接在dos窗口用字符输出的。。。 代码仅供参考哦(使用多线程) main.c
#define WIN32_LEAN_AND_MEAN

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include "snake.h"

int main()
{
    HANDLE hThrd;
    DWORD threadId;
    flage=4;
    time_interval=10;
    hThrd=CreateThread(NULL,0,snake,(LPVOID)0,0,&threadId);
    for(;;)
    {
        switch(getch())
        {
        case 224:
            switch(getch())
            {
            case 72:
                if(flage!=2&&flage>0)
                {
                    flage=1;
                }
                break;
            case 80:
                if(flage!=1&&flage>0)
                {
                    flage=2;
                }
                break;
            case 75:
                if(flage!=4&&flage>0)
                {
                    flage=3;
                }
                break;
            case 77:
                if(flage!=3&&flage>0)
                {
                    flage=4;
                }
                break;
            }
            break;
        case 32:
            flage=-flage;
            break;
        case 'w':
            if(time_interval<200)
            {
                time_interval=time_interval+1;
            }
            break;
        case 'e':
            if(time_interval>1)
            {
                time_interval=time_interval-1;
            }
            break;
        }
        Sleep(100);
    }
    getchar();
    return 0;
}
snake.c
//#define WIN32_LEAN_AND_MEAN
#define HEIGHT 20
#define WIDE 76
#define ICO "*"

int flage;
int time_interval;

struct node
{
    int x;
    int y;
    struct node* next;
};

void getpos(HANDLE hOut,COORD *pos)
{
    CONSOLE_SCREEN_BUFFER_INFO info;
    GetConsoleScreenBufferInfo( hOut , &info );
    *pos = info.dwCursorPosition;
}
void gotopos(HANDLE hOut,COORD pos)
{
    SetConsoleCursorPosition(hOut, pos);
}

void put_logo()
{
    int i;
    for(i=0; i<8; i++)
    {
        printf("\n");
    }
    for(i=0; i<35; i++)
    {
        printf(" ");
    }
    printf("snake");
    Sleep(2000);
    system("cls");
}

void start_map()
{
    int i;
    int j;
    for(i=0; i<HEIGHT+3; i++)
    {
        for(j=0; j<WIDE+3; j++)
        {
            if(i==0||i==HEIGHT+2)
            {
                printf("=");
            }
            else if(j==0||j==WIDE+2)
            {
                printf("|");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
}

struct node* clear_last(HANDLE hOut,COORD pos,struct node* p,int x,int y)
{
    pos.X = p->x;
    pos.Y = p->y;
    gotopos(hOut,pos);
    printf(" ");
    p->x=x;
    p->y=y;
    return p->next;
}

int check_ways(struct node* q,int x,int y,int len)
{
    int i;
    if(x<1||x>WIDE+1)
    {
        return 1;
    }
    if(y<1||y>HEIGHT+1)
    {
        return 1;
    }
    for(i=0; i<len; i++)
    {
        if(q->x==x&&q->y==y)
        {
            return 1;
        }
        q=q->next;
    }
    return 0;
}

DWORD WINAPI  snake()
{
    struct node snakes;
    struct node* head;
    struct node* p;
    struct node* q;
    HANDLE hOut;
    COORD pos;
    int i;
    int len;
    len=10;
    snakes.x=1;
    snakes.y=1;
    snakes.next=NULL;
    pos.X=snakes.x;
    pos.Y=snakes.y;
    start_map();
    hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    gotopos(hOut,pos);
    head=p=q=malloc(sizeof(struct node));
    p->x=snakes.x++;
    p->y=snakes.y;
    printf(ICO);
    p->next=q;
    for(i=0; i<len-1; i++)
    {
        q=p;
        p=malloc(sizeof(struct node));
        p->x=snakes.x++;
        p->y=snakes.y;
        printf(ICO);
        p->next=head;
        q->next=p;
    }
    printf(ICO);
    snakes.x=snakes.x-1;
    p=head;
    for(;; Sleep(time_interval*50))
    {
        switch(flage)
        {
        case 1:
            snakes.y--;
            break;
        case 2:
            snakes.y++;
            break;
        case 3:
            snakes.x--;
            break;
        case 4:
            snakes.x++;
            break;
        default :
            goto _NEXT;
            break;
        }
        if(check_ways(head,snakes.x,snakes.y,len))
        {
            goto _END;
        }
        p=clear_last(hOut,pos,p,snakes.x,snakes.y);
        pos.X=snakes.x;
        pos.Y=snakes.y;
        gotopos(hOut,pos);
        printf(ICO);
        printf("\b");
_NEXT:
        ;
    }
_END:
    ;
    pos.X=25;
    pos.Y=10;
    gotopos(hOut,pos);
    printf("game over!you have %d long snakes\b",len);
}
snake.h
#include "snake.c"

void put_logo();
void getpos(HANDLE hOut,COORD *pos);
void gotopos(HANDLE hOut,COORD pos);
DWORD WINAPI  snake();
wu4357815 2014-06-13
  • 打赏
  • 举报
回复
就c的话,turbo c其实是有图形界面的,只不过你不知道而已,而且很简单。 再者,你可以用win32开发,不需要用mfc,win32贪吃蛇 可以参考着个(随便找的。)http://download.csdn.net/detail/qq752923276/4562794
赵4老师 2014-06-13
  • 打赏
  • 举报
回复
在百度搜“VC 贪吃蛇”
没事人 2014-06-13
  • 打赏
  • 举报
回复
这个不太难只要知道相关的函数,比如随机,比如光标。。。。。
bug_________ 2014-06-13
  • 打赏
  • 举报
回复
C游戏编程从入门到精通 这本书不知道讲的什么 可以看下是否适合 看windows编程 一般都是这个
buyong 2014-06-13
  • 打赏
  • 举报
回复
自己搜一个源码,然后调试学系

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧