| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2863 人关注过本帖, 1 人收藏
标题:大家好~~自己写的小游戏哦!来看看吧!暂时开发到一半~~
只看楼主 加入收藏
拉拉面
Rank: 1
来 自:广州
等 级:新手上路
帖 子:26
专家分:5
注 册:2018-9-22
结帖率:100%
收藏(1)
 问题点数:0 回复次数:10 
大家好~~自己写的小游戏哦!来看看吧!暂时开发到一半~~
我花4天赶出来一半的游戏
请大家指出错误或需要改进之处哦
我只学了半年的c语言。。
技术略菜
好吧,下面直接放代码
程序代码:
#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<math.h>
#include<algorithm>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
void sxy(int x,int y);
void rand_start(int n);
int ate();
int rbh(int s,int e);
int srt[10][2];//星星坐标 
int x=3,y=1;//玩家1坐标 x是纵 y是横  
int a=4,b=1;//玩家2坐标 a是纵 b是横 

int rbh(int s,int e)//随机数的生成 
{
    int dis= e-s;
    return rand()%dis+s;
}

void sxy(int x,int y)
{
    COORD pos = {y,x};
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
    CONSOLE_CURSOR_INFO info = {1, 0};
    SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);
}

void rand_start(int n)//按照序号n随机生成第n个星星的坐标 
{
    srt[n][0]=rbh(2,31);
    srt[n][1]=rbh(15,63);
}

int ate(int n)//判断是否吃星 
{
    if(n==1)//如果n是1,判断玩家1 
    {
        for(int i=0;i<10;i++)//遍历所有星星的坐标 
        {
            if(x==srt[i][0]&&y==srt[i][1])//如果坐标重叠为吃了星星,返回星星的序号 
                return i;
        }
    }
    else if(n==2)//如果n是2,判断玩家2
    {
        for(int i=0;i<10;i++)//遍历所有星星的坐标 
        {
            if(a==srt[i][0]&&b==srt[i][1])//如果坐标重叠为吃了星星,返回星星的序号 
                return i;
        }
    }
    return -1;//如果没吃,返回-1 
}

void SetColor(unsigned short ForeColor,unsigned short BackGroundColor)
{
    HANDLE hCon=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hCon,(ForeColor%16)|(BackGroundColor%16*16));
}
void star()
{
    system("title 点点大作战"); 
    int i=0; 
    while(1)
    {
        printf("\n\n\n\n\t\t点击屏幕开始游戏....");
        if(KEY_DOWN(MOUSE_MOVED))
            break;
        else
        {
            SetColor(15,i);
            Sleep(50);
            if(KEY_DOWN(MOUSE_MOVED)) 
                break;
            else
                Sleep(50);
            if(KEY_DOWN(MOUSE_MOVED))
                break;
            else
                Sleep(50);
            if(KEY_DOWN(MOUSE_MOVED))
                break;
            else
                Sleep(50);
        }
        i++;
        if(i==15)
            i++;
        system("cls");
    }
    SetColor(15,0);
    system("cls");
}
int double_game()
{
    x=3;
    y=1;
    a=4;
    b=1;
    system("cls");
    system("title 双人模式~~~~");
    int i,st,yfen=0,efen=0,alv=1,blv=1;
    char ch;
    i=0;
    for(i=0;i<10;i++)
        rand_start(i);
    for(i=0;i<10;i++)
    {
        sxy(srt[i][0],srt[i][1]);
        printf("%c",4);
    }
    SetColor(15,0);
    sxy(0,0);
    printf("%c 玩家1分数:%03d %c 玩家2分数:%03d",2,yfen,1,efen);
    sxy(1,0);
    printf("%c 玩家1等级:%03d %c 玩家2等级:%03d",2,alv,1,blv);
    while(1)
    {
        SetColor(15,0);
        sxy(x,y);
        printf("%c",2);
        sxy(a,b);
        printf("%c",1);
        ch=getch();
        switch(ch)
        {
            case 72:sxy(x,y);printf(" ");x--;break;
            case 80:sxy(x,y);printf(" ");x++;break;
            case 75:sxy(x,y);printf(" ");y--;break;
            case 77:sxy(x,y);printf(" ");y++;break;
            case 'w':sxy(a,b);printf(" ");a--;break;
            case 's':sxy(a,b);printf(" ");a++;break;
            case 'a':sxy(a,b);printf(" ");b--;break;
            case 'd':sxy(a,b);printf(" ");b++;break;
        }
        if(x>=32||y>=63||x<0||y<0)
        {
            SetColor(15,0);
            system("cls");
            printf("\n\n\n\t\t玩家1撞墙了,玩家2获胜");
            Sleep(1000);
            system("title 点点大作战");
            return 0;
        }
        else if(a>=32||b>=63||a<0||b<0)
        {
            SetColor(15,0);
            system("cls");
            printf("\n\n\n\t\t玩家2撞墙了,玩家1获胜");
            Sleep(1000);
            system("title 点点大作战");
            return 0;
        }
        st=ate(1);
        if(st!=-1)
        {
            yfen++;
            sxy(0,12);
            printf("%03d",yfen);//更新分数输出 
            if(yfen%5==0)
            {
                alv++;
                sxy(1,12);
                printf("%03d",alv); //更新等级输出 
            }
            rand_start(st);
            sxy(srt[st][0],srt[st][1]);
            printf("%c",4);
        }
        st=ate(2);
        if(st!=-1)
        {
            efen++;
            sxy(0,28);
            printf("%03d",efen);//更新分数输出 
            if(efen%5==0)
            {
                blv++;
                sxy(1,28);
                printf("%03d",blv);//更新等级输出 
            }
            rand_start(st);
            sxy(srt[st][0],srt[st][1]);
            printf("%c",4);
        }
        if(a==x&&b==y)
        {
            if(alv>blv)
            {
                system("cls");
                printf("\n\n\n\t\t玩家2被吞噬!玩家1获胜!!");
                Sleep(1000);
                system("title 点点大作战");
                return 1;
            }
            else if(alv<blv)
            {
                system("cls");
                printf("\n\n\n\t\t玩家1被吞噬!玩家2获胜!!");
                Sleep(1000);
                system("title 点点大作战");
                return 2;
            }
            else
            {
                sxy(a-1,b-1);
                printf("碰 撞");
                Sleep(500);
                system("cls");
                printf("\n\n\t\t\t同归于尽!");
                Sleep(1000);
                system("title 点点大作战");
                return 0;
            }
        }
    }
}

int alone_game()
{
    x=3;
    y=1;
    system("cls");
    system("title 单人模式~~~~");
    int i,st,yfen=0,alv=1;
    char ch;
    i=0;
    for(i=0;i<10;i++)
        rand_start(i);
    for(i=0;i<10;i++)
    {
        sxy(srt[i][0],srt[i][1]);
        printf("%c",4);
    }
    sxy(0,0);
    printf("%c 分数:%03d 等级:%03d",2,yfen,alv);
    while(1)
    {
        sxy(x,y);
        printf("%c",2);
        ch=getch();
        switch(ch)
        {
            case 72:sxy(x,y);printf(" ");x--;break;
            case 80:sxy(x,y);printf(" ");x++;break;
            case 75:sxy(x,y);printf(" ");y--;break;
            case 77:sxy(x,y);printf(" ");y++;break;
        }
        if(x>=32||y>=63||x<0||y<0)
        {
            SetColor(15,0);
            system("cls");
            printf("\n\n\n\t\t你撞墙了,失败~~~");
            Sleep(1000);
            system("title 点点大作战");
            return 0;
        }
        st=ate(1);
        if(st!=-1)
        {
            yfen++;
            sxy(0,7);
            printf("%03d",yfen);//更新分数输出 
            if(yfen%5==0)
            {
                alv++;
                sxy(0,16);
                printf("%03d",alv); //更新等级输出 
            }
            rand_start(st);
            sxy(srt[st][0],srt[st][1]);
            printf("%c",4);
        }
    }
}

int main()
{
    system("mode con cols=63 lines=32");
    int choose=10;
    char c; 
    star();
    sxy(10,25);
    printf("==比==赛==");
    sxy(11,25);
    printf("==训==练==");
    sxy(12,25);
    printf("==娱==乐==");
    sxy(13,25);
    printf("==退==出==");
    while(1)
    {
        sxy(choose-1,23);
        printf("  ");
        sxy(choose+1,23);
        printf("  ");
        sxy(choose,23);
        SetColor(12,0);
        printf("->");
        SetColor(15,0);
        c=getch();
        if(c==72&&choose>10)
            choose--;
        else if(c==80&&choose<13)
            choose++;
        else if(c==13)
        {
            if(choose==10)
            {
                choose=11;
                while(1)
                {
                    sxy(choose-1,23);
                    printf("  ");
                    sxy(choose+1,23);
                    printf("  ");
                    sxy(choose,23);
                    SetColor(12,0);
                    printf("->");
                    SetColor(15,0);
                    sxy(10,25);
                    printf("==比==赛==");
                    sxy(11,25);
                    printf(" = 双人 = ");
                    sxy(12,25);
                    printf(" = 单人 = ");
                    sxy(13,25);
                    printf(" = 收起 = ");
                    sxy(14,25);
                    printf("==娱==乐==");
                    sxy(15,25);
                    printf("==退==出==");
                    c=getch();
                    if(c==72&&choose>11)
                        choose--;
                    else if(c==80&&choose<13)
                        choose++;
                    else if(c==13)
                    {
                        if(choose==11)
                        {
                            double_game();
                            system("cls");
                        }
                        else if(choose==12)
                        {
                            alone_game();
                            system("cls");
                        }
                        else if(choose==13)
                        {
                            system("cls");
                            sxy(10,25);
                            printf("==比==赛==");
                            sxy(11,25);
                            printf("==训==练==");
                            sxy(12,25);
                            printf("==娱==乐==");
                            sxy(13,25);
                            printf("==退==出==");
                            choose=10;
                            break;
                        }
                    }
                }
            }
            else if(choose==13)
            {
                return 0;
            }
            else
            { 
                MessageBox(NULL,TEXT("该功能还未开放哦!"), TEXT("敬请期待"), MB_OK | MB_ICONINFORMATION );
            }
        }
    }
}



作者QQ:3244982757
搜索更多相关主题的帖子: int system printf break case 
2018-10-07 13:17
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
谢谢。又学会了一个system()的用法
2018-10-08 21:37
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:396
专家分:2640
注 册:2018-3-30
收藏
得分:0 
看起来不错啊这游戏

saber,别哭.
2018-10-09 10:12
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:0 
为什么我的背景是这个样子,都看不到我在哪了
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-10-09 20:51
lxk1732942
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:450
专家分:425
注 册:2018-9-4
收藏
得分:0 
为什么我的背景是这个样子,都看不到我在哪了
图片附件: 游客没有浏览图片的权限,请 登录注册
2018-10-09 20:51
拉拉面
Rank: 1
来 自:广州
等 级:新手上路
帖 子:26
专家分:5
注 册:2018-9-22
收藏
得分:0 
回复 4楼 lxk1732942
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
我的运行效果是这样子的,运行出错可能是编译器不一样的原因,也有可能有bug

哈哈哈哈哈啦啦啦
2018-10-10 17:31
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
这是什么游戏呀

剑栈风樯各苦辛,别时冰雪到时春
2018-10-10 17:39
Lt823362568
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-10-10
收藏
得分:0 
用什么来编译呀楼主
2018-10-10 20:18
qianlonglong
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-10-10
收藏
得分:0 
用的什么编译器呀
2018-10-10 20:43
拉拉面
Rank: 1
来 自:广州
等 级:新手上路
帖 子:26
专家分:5
注 册:2018-9-22
收藏
得分:0 
这里的代码用vc,vs,dev c++之类的都可以编译。无法编译的能不能把错误信息发出来?

哈哈哈哈哈啦啦啦
2018-10-10 21:41
快速回复:大家好~~自己写的小游戏哦!来看看吧!暂时开发到一半~~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029929 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved