| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 933 人关注过本帖
标题:问题在哪,怎么改
只看楼主 加入收藏
xhrneverstop
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-11-17
收藏
 问题点数:0 回复次数:1 
问题在哪,怎么改
/*头文件*/
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <windows.h>
/*宏定义*/
#define MAXIMUS 15
/*函数声明*/
int p[MAXIMUS][MAXIMUS];
char buff[MAXIMUS*2+1][MAXIMUS*4+3];
int Cx,Cy;
int Now;
int wl,wp;
char* showText;
int count;
void explation();
void gotoxy(int x,int y);
int color(int c);
/*设置光标位置*/
void gotoxy(int x,int y)
{
    COORD c;
    c.X=x;
    c.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
/*文字颜色函数,此函数的局限性:1.只能Windows系统下使用;2.不能改变背景颜色*/
#include <windows.h>
int color(int c)
{
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
    return 0;
}
/*开始界面*/
void welcometogame()
{
    int n;
    int i,j=1;
    gotoxy(23,2);
    color(13);
    printf("五 子 棋 游 戏");
    color(15);
    for (i=6;i<=12;i++)
    {
        for (j=7;j<=54;j++)
        {
            gotoxy(j,i);
            if (i==6||i==12)
            {
                printf("-");
            }
            else if (j==7||j==54)
            {
                printf("|");
            }
        }
    }
    color(14);
    gotoxy(15,8);
    printf("1.游戏开始");
    gotoxy(35,8);
    printf("2.游戏说明");
    gotoxy(15,10);
    printf("3.退出游戏");
    gotoxy(19,13);
    color(12);
    printf("请选择[1 2 3]:[ ]\b\b");
    color(14);
    scanf("%d",&n);
    switch (n)
    {
        case 1:
            system("cls");
            RunGame();
            break;
        case 2:
            explation();
            break;
        case 3:
            exit(0);
            break;
    }
}
/*游戏说明*/
void explation()
{
    int i,j=1;
    system("cls");
    color(13);
    gotoxy(27,3);
    printf("游戏说明");
    color(5);
    for (i=6;i<=22;i++)
    {
        for (j=3;j<=58;j++)
        {
            gotoxy(j,i);
            if (i==6||i==22) printf("=");
            else if (j==3||j==58) printf("||");
        }
    }
    color(15);
    gotoxy(10,8);
    printf("tip1:用↑.↓.←.→控制光标的位置");
    color(14);
    gotoxy(10,11);
    printf("tip2:用空格键确定下棋子");
    color(12);
    gotoxy(10,14);
    printf("tip3:黑白棋哪个先上下左右5个连在一起,得胜利");
    color(11);
    gotoxy(10,17);
    printf("tip4:按<Esc>退出游戏");
    getch();
    system("cls");
    welcometogame();
}
//修改过的字符串复制函数,会忽略末端的\0
    char* Copy(char* strDest,const char* strSrc)
    {
    char* strDestCopy = strDest;
    while (*strSrc!='\0')
    {
    *strDest++=*strSrc++;
    }
    return strDestCopy;
    }
    //初始化一个对局函数
    void Initialize()
    {
    int i,j;//循环变量
    showText="";//重置显示信息
    count=0;//回合数归零
    for(i=0;i<MAXIMUS;i++)//重置对局数据
    {
    for(j=0;j<MAXIMUS;j++)
    {
    p[i][j]=0;
    }
    }
    Cx=Cy=MAXIMUS/2;//重置光标到中央
    Now=1;//重置当前为黑方
    }
    //获得棋盘中指定坐标交点位置的字符,通过制表符拼成棋盘
    char* getStyle(int i,int j)
    {
    if(p[i][j]==1)//1为黑子
    return "●";
    else if(p[i][j]==2)//2为白子
    return "○";
    else if(i==0&&j==0)//以下为边缘棋盘样式
    return "┏";
    else if(i==MAXIMUS-1&&j==0)
    return "┓";
    else if(i==MAXIMUS-1&&j==MAXIMUS-1)
    return "┛";
    else if(i==0&&j==MAXIMUS-1)
    return "┗";
    else if(i==0)
    return "┠";
    else if(i==MAXIMUS-1)
    return "┨";
    else if(j==0)
    return "┯";
    else if(j==MAXIMUS-1)
    return "┷";
    return "┼";//中间的空位
    }
    //获得指定坐标交点位置左上格的样式,通过制表符来模拟光标的显示
    char* getCurse(int i,int j)
    {
    if(i==Cx)
    {
    if(j==Cy)
    return "┏";
    else if (j==Cy+1)
    return "┗";
    }
    else if(i==Cx+1)
    {
    if(j==Cy)
    return "┓";
    else if (j==Cy+1)
    return "┛";
    }
    return " ";//如果不在光标附近则为空
    }
    //向缓冲器写入字符串
    void write(char* c)
    {
    Copy(buff[wl]+wp,c);
    wp+=strlen(c);
    }
    //缓冲器写入位置提行
    void ln()
    {
    wl+=1;
    wp=0;
    }
void Display()
{
    int i,l=strlen(showText);
    int Offset=MAXIMUS*2+2-1/2;
    if(Offset%2==1)
    {
        Offset--;
    }
    Copy(buff[MAXIMUS]+Offset,showText);
    if(1%2==1)
    {
        *(buff[MAXIMUS]+Offset+1)=0x20;
    }
    system("cls");
    for(i=0;i<MAXIMUS*2+1;i++)
    {
        printf("%s",buff[i]);
        if(i<MAXIMUS*2)
        printf("\n");
    }
}
//将整个棋盘算出并储存到缓冲器,然后调用Display函数显示出来
    void Print()
    {
    int i,j;//循环变量
    wl=0;
    wp=0;
    for(j=0;j<=MAXIMUS;j++)//写入出交点左上角的字符,因为需要打印棋盘右下角,所以很以横纵各多一次循环
    {
    for(i=0;i<=MAXIMUS;i++)
    {
    write(getCurse(i,j));//写入左上角字符
    if(j==0||j==MAXIMUS)//如果是棋上下盘边缘则没有连接的竖线,用空格填充位置
    {
    if(i!=MAXIMUS)
    write(" ");
    }
    else//如果在棋盘中间则用竖线承接上下
    {
    if(i==0||i==MAXIMUS-1)//左右边缘的竖线更粗
    write("┃");
    else if(i!=MAXIMUS)//中间的竖线
    write("│");
    }
    }
    if(j==MAXIMUS)//如果是最后一次循环,则只需要处理边侧字符,交点要少一排
    {
    break;
    }
    ln();//提行开始打印交点内容
    write(" ");//用空位补齐位置
    for(i=0;i<MAXIMUS;i++)//按横坐标循环正常的次数
    {
    write(getStyle(i,j));//写入交点字符
    if(i!=MAXIMUS-1)//如果不在最右侧则补充一个横线承接左右
    {
    if(j==0||j==MAXIMUS-1)
    {
    write("━");//上下边缘的横线更粗
    }
    else
    {
    write("—");//中间的横线
    }
    }
    }
    ln();//写完一行后提行
    }
    Display();//将缓冲器内容输出到屏幕
    }
    int Put(){//在当前光标位置走子,如果非空,则返回0表示失败
    if(p[Cx][Cy]==0)
    {
    p[Cx][Cy]=Now;//改变该位置数据
    return 1;//返回1表示成功
    }
    else
    {
    return 0;
    }
    }
    //胜负检查,即判断当前走子位置有没有造成五连珠的情况
    int Check()
    {
    int w=1,x=1,y=1,z=1,i;//累计横竖正斜反邪四个方向的连续相同棋子数目
    for(i=1;i<5;i++)
        if(Cy+i<MAXIMUS&&p[Cx][Cy+i]==Now)
            w++;
        else
            break;//向下检查
    for(i=1;i<5;i++)
        if(Cy-i>0&&p[Cx][Cy-i]==Now)
            w++;
        else
            break;//向上检查
    if(w>=5)
        return Now;//若果达到5个则判断当前走子玩家为赢家
    for(i=1;i<5;i++)
        if(Cx+i<MAXIMUS&&p[Cx+i][Cy]==Now)
            x++;
        else
            break;//向右检查
    for(i=1;i<5;i++)
        if(Cx-i>0&&p[Cx-i][Cy]==Now)
            x++;
        else
            break;//向左检查
    if(x>=5)
        return Now;//若果达到5个则判断当前走子玩家为赢家
    for(i=1;i<5;i++)
        if(Cx+i<MAXIMUS&&Cy+i<MAXIMUS&&p[Cx+i][Cy+i]==Now)
            y++;
        else
            break;//向右下检查
    for(i=1;i<5;i++)
        if(Cx-i>0&&Cy-i>0&&p[Cx-i][Cy-i]==Now)
            y++;
        else
            break;//向左上检查
    if(y>=5)
        return Now;//若果达到5个则判断当前走子玩家为赢家
    for(i=1;i<5;i++)
        if(Cx+i<MAXIMUS&&Cy-i>0&&p[Cx+i][Cy-i]==Now)
            z++;
        else
            break;//向右上检查
    for(i=1;i<5;i++)
        if(Cx-i>0&&Cy+i<MAXIMUS&&p[Cx-i][Cy+i]==Now)
            z++;
        else
            break;//向左下检查 if(z>=5)return Now;//若果达到5个则判断当前走子玩家为赢家
    return 0;//若没有检查到五连珠,则返回0表示还没有玩家达成胜利
    }   
int RunGame()
{
    int input:
    int victor;
    Initialize();
    while(1)
    {
        Print();
        input=getch()
            if(input==27)
            {
                exit(0);
            }
            else if(input==0x20)
            {
                if(Put())
                {
                    victor=Check();
                    Now=3-Now;
                    count++;
                    if(victor==1)
                    {
                        showText="黑方获得了胜利!";
                        Print();
                        if(getch()==0xE0)
                        {
                            getch();
                        }
                        return Now:
                    }
                    else if(victor==2)
                    {
                        showText="白方获得了胜利!";
                        Display();
                    if(getch()==0xE0)
                    {
                        getch();
                    }
                    return Now;
                    }
                    else if(count==MAXIMUS*MAXIMUS)
                    {
                        showText="平局!";
                        Display();
                        if(getch()==0xE0)
                        {
                            getch();
                        }
                        return 0;
                    }
                }
            }

            else if(input==0xE0)
            {
                input=getch();
                switch(input)
                {
                case 0x4B:Cx--;break;
                case 0x48:Cy--;break;
                case 0x4D:Cx++;break;
                case 0x50:Cy++;break;
                }
                if(Cx<0)Cx=MAXIMUS-1;
                if(Cy<0)Cy=MAXIMUS-1;if(Cx>MAXIMUS-1)Cx=0:
                if(Cy>MAXINUS-1)Cy=0;
            }
    }
}
int main()
{
    welcometogame();
    while(1);
    {
        RunGame();
    }
    return 0;
}



错误提示处:
--------------------Configuration: wuzhiqi - Win32 Debug--------------------
Compiling...
wuzhiqi.c
E:\Hello\wuzhiqi.c(32) : error C2115: 'function' : incompatible types
E:\Hello\wuzhiqi.c(32) : warning C4024: 'SetConsoleCursorPosition' : different types for formal and actual parameter 2
E:\Hello\wuzhiqi.c(75) : warning C4013: 'RunGame' undefined; assuming extern returning int
E:\Hello\wuzhiqi.c(336) : error C2143: syntax error : missing ';' before ':'
E:\Hello\wuzhiqi.c(343) : error C2143: syntax error : missing ';' before 'if'
E:\Hello\wuzhiqi.c(351) : error C2065: 'victor' : undeclared identifier
E:\Hello\wuzhiqi.c(362) : error C2143: syntax error : missing ';' before ':'
E:\Hello\wuzhiqi.c(398) : error C2143: syntax error : missing ';' before ':'
Error executing cl.exe.

wuzhiqi.obj - 6 error(s), 2 warning(s)
搜索更多相关主题的帖子: int return printf for break 
2018-11-18 01:05
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:0 
从哪抄的代码?怎么都抄错了:有四个地方“;”写成了冒号“:”,自己找吧

 WINBASEAPI WINBOOL WINAPI SetConsoleCursorPosition(HANDLE hConsoleOutput,COORD dwCursorPosition);
COORD dwCursorPosition:COORD结构体变量,x,y坐标,岂是一个int能替代的?
2018-11-18 20:32
快速回复:问题在哪,怎么改
数据加载中...
 
   



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

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