成功了,我是菜鸟我怕谁,呵呵!
c语言吧
全部回复
仅看楼主
level 6
文刀2鸟 楼主
俺终于把c++的五子棋程序改写成windowsAPI的了,模拟的字符模式的程序,没有使用任何绘图功能,因此,界面全是字符的,在vc6.0中我一共做了以下几步:1、新建一个新的工程,选择win32 Application,工程框中输入:5zq点完成。2、在工程菜单-----〉设置---------〉link 在object/lib 模块中加入:winmm.lib,以便支持PlaySound()函数。3、新建:C++ Source File,加入工程:5zq中,文件框中输入:5zq点结束4、在5zq.cpp中输入下面的内容:#include
#define BUFFER(x,y) *(pBuffer + y * cxBuffer + x )
#define CHESSNULL   0  //没有棋子#
define CHESS1      'O'//一号玩家的棋子#define CHESS2      'X'//二号玩家的棋子#define CHESSBOARDCROSS '.'#define CROSSRU     CHESSBOARDCROSS  /*右上角点*/#define CROSSLU     CHESSBOARDCROSS  /*左上角点*/#define CROSSLD     CHESSBOARDCROSS  /*左下角点*/#define CROSSRD     CHESSBOARDCROSS  /*右下角点*/#define CROSSL      CHESSBOARDCROSS  /*左边*/#define CROSSR      CHESSBOARDCROSS  /*右边*/#define CROSSU      CHESSBOARDCROSS  /*上边*/#define CROSSD      CHESSBOARDCROSS  /*下边*/#define CROSS       CHESSBOARDCROSS  /*十字交叉点*/#define WINTRUE     1#define WINFALSE    0  LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,   PSTR szCmdLine, int iCmdShow){static TCHAR szAppName[]=TEXT("5zq");HWND hwnd;MSG msg;WNDCLASS wndclass;wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc=WndProc;wndclass.cbClsExtra=0;wndclass.cbWndExtra=0;wndclass.hInstance=hInstance;wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName=NULL;wndclass.lpszClassName=szAppName;if(!RegisterClass(&wndclass)){MessageBox(NULL,TEXT("This program requires Windowsd NT!"),szAppName,MB_ICONERROR);return 0;}hwnd=CreateWindow(szAppName,TEXT("5zq Program"),WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,iCmdShow);UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return msg.wParam;}LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
2007年09月05日 13点09分 1
level 6
文刀2鸟 楼主
{static DWORD dwCharSet=DEFAULT_CHARSET;static int   cxChar,cyChar,cxClient,cyClient,cxBuffer,cyBuffer,xCaret,yCaret;static TCHAR * pBuffer=NULL;static int   Order=CHESS1,bOutWhile=WINFALSE;  char *Msg[]={    "Player1 key: ",    "  UP----w    ",    "  DOWN--s    ",    "  LEFT--a    ",    "  RIGHT-d    ",    "  DO----space",    "             ",    "Player2 key: ",    "  UP----up   ",    "  DOWN--down ",    "  LEFT--left ",    "  RIGHT-right",    "  DO----ENTER",    "             ",    "new game:    ",    "  ESC        ",    NULL,  };HDC hdc;HBRUSH hBrush;int x,y,i;PAINTSTRUCT ps;TEXTMETRIC tm;int Direction,WinFlag=WINFALSE;switch(message){case WM_INPUTLANGCHANGE:dwCharSet=wParam;case WM_CREATE:hdc=GetDC(hwnd);SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,dwCharSet,0,0,0,FIXED_PITCH,NULL));GetTextMetrics(hdc,&tm);cxChar=tm.tmAveCharWidth;cyChar=tm.tmHeight;DeleteObject(SelectObject(hdc,GetStockObject(SYSTEM_FONT)));ReleaseDC(hwnd,hdc);        cxBuffer=max(1,19);cyBuffer=max(1,19);if(pBuffer!=NULL)free(pBuffer);pBuffer=(TCHAR *)malloc(cxBuffer *cyBuffer *sizeof(TCHAR));for(y=0;y
2007年09月05日 13点09分 2
level 6
文刀2鸟 楼主
if(Order==CHESS2)yCaret=max(yCaret-1,0);break;case VK_DOWN:if(Order==CHESS2)yCaret=min(yCaret+1,cyBuffer-1);break;case VK_DELETE://退棋break;}SetCaretPos(xCaret *cxChar,yCaret*cyChar);return 0;case WM_CHAR:for(i=0;i<(int)LOWORD(lParam);i++){switch(wParam){case 'w'://UPcase 'W':  if(Order==CHESS1)yCaret=max(yCaret-1,0);break;case 's'://DOWN case 'S':if(Order==CHESS1)yCaret=min(yCaret+1,cyBuffer-1);break;case 'a'://LEFT case 'A':if(Order==CHESS1)xCaret=max(xCaret-1,0);        break;case 'd'://RIGHTcase 'D':if(Order==CHESS1)xCaret=min(xCaret+1,cxBuffer-1);break;case ' ':case '\r'://落子if(!((Order==CHESS2&&wParam=='\r')||(Order==CHESS1&&wParam==' '))){//DoError();PlaySound(TEXT("DoError.wav"),NULL,SND_FILENAME|SND_ASYNC);break;}if(BUFFER(xCaret,yCaret)==CHESSNULL){BUFFER(xCaret,yCaret)=Order;HideCaret(hwnd);hdc=GetDC(hwnd);if(BUFFER(xCaret,yCaret)==CHESS1)hBrush=(HBRUSH)CreateSolidBrush(RGB(0,0,255));else hBrush=(HBRUSH)CreateSolidBrush(RGB(255,0,0));SelectObject(hdc,CreateFont(0,0,0,0,0,0,0,0,dwCharSet,0,0,0,FIXED_PITCH,NULL));TextOut(hdc,xCaret * cxChar,yCaret * cyChar,&BUFFER(xCaret,yCaret),1);SetTextAlign(hdc,TA_LEFT|TA_TOP);DeleteObject(SelectObject(hdc,GetStockObject(SYSTEM_FONT)));ReleaseDC(hwnd,hdc);DeleteObject(hBrush);ShowCaret(hwnd);PlaySound(TEXT("DoOk.wav"),NULL,SND_FILENAME|SND_ASYNC);//DoOk();for(Direction=0;Direction<4&&!WinFlag;Direction++){int i;int pos_x,pos_y,dpos_x,dpos_y;const int testnum=5;int count;switch(Direction){case 0:/*在水平方向*/pos_x=xCaret-(testnum-1);pos_y=yCaret;dpos_x=1;dpos_y=0;break;case 1:/*在垂直方向*/pos_x=xCaret;pos_y=yCaret-(testnum-1);dpos_x=0;dpos_y=1;break;case 2:/*在左下至右上的斜方向*/pos_x=xCaret-(testnum-1);pos_y=yCaret+(testnum-1);dpos_x=1;dpos_y=-1;break;case 3:/*在左上至右下的斜方向*/pos_x=xCaret-(testnum-1);pos_y=yCaret-(testnum-1);dpos_x=1;dpos_y=1;break;}count=0;for(i=0;i
=0&&pos_x<=18&&pos_y>=0&&pos_y<=18){if(BUFFER(pos_x,pos_y)==Order)
2007年09月05日 13点09分 3
level 6
文刀2鸟 楼主
{count++;if(count>=testnum)WinFlag=WINTRUE;}else{count=0;    WinFlag = WINFALSE;}}pos_x+=dpos_x;pos_y+=dpos_y;}}if(WinFlag){PlaySound(TEXT("DoWin.wav"),NULL,SND_FILENAME|SND_ASYNC);//DoWin();}else{if(Order==CHESS1)Order=CHESS2;elseOrder=CHESS1;}}else{//DoError();PlaySound(TEXT("DoError.wav"),NULL,SND_FILENAME|SND_ASYNC);}break;case '\x1B':InvalidateRect(hwnd,NULL,FALSE);break;default:break;}}SetCaretPos(xCaret * cxChar, yCaret * cyChar);      if(WinFlag){MessageBox(NULL,TEXT("Winner"),TEXT("WinInfo"),0);         if(pBuffer!=NULL)free(pBuffer);pBuffer=(TCHAR *)malloc(cxBuffer *cyBuffer *sizeof(TCHAR));for(y=0;y
2007年09月05日 13点09分 4
level 6
文刀2鸟 楼主
哦,对了,忘了链上那个C++程序了,http://post.baidu.com/f?kz=257292053
2007年09月05日 13点09分 5
level 6
文刀2鸟 楼主
这百度,把我的格式全搞乱了,缩进都没有了,晕~~~~~~~~~~~~~~~
2007年09月05日 13点09分 6
level 7
空格替换为 即可
2007年09月05日 13点09分 7
level 6
文刀2鸟 楼主
替换过了,从vc6.0拷贝出来的时候可能有好多tab,没有替换掉,就成了上面的样子,呵呵
2007年09月05日 13点09分 8
level 6
文刀2鸟 楼主
立正。
2007年09月06日 05点09分 9
level 1
good
2007年09月06日 12点09分 10
level 9
.
2007年09月07日 02点09分 12
level 9
GOOD
2007年09月07日 03点09分 13
level 9
首先,这是一个标准的win95程序,来源应该是windows程序设计6.5.2TYPER程序的源码。在windows32和windows95中,在MFC之前,这样的程序是很不错的哦。其次,这个程序应该说是从c语言的程序直接改写而来的,并没有任何C++的痕迹,因为C++最基本的类根本没有出现.因此不能说是从C++改写成功的,呵呵.第三,这个程序只有WinMain()和WndProc()两个函数,原来C程序的函数结构都没有继承下来;如果能继承,就很想win95程序了,甚至像MFC了,当然可读性就更好了.第四,由于完全采用API的字符输出函数TextOut,没有使用其他绘图功能,因此界面显得很粗糙,不过这其实是一个很好的优点,可以清晰的看到原始C程序的脉络,非常清晰,作为学习其实很不错的哦,第五,让我们大胆的猜想,楼主能在2个礼拜之内,把5子棋程序从C写成C++,进而写出了WINDOWS API的程序,据说还要再改成MFC的,可以看出,这个家伙绝对不是才学C++两个礼拜,要不就是我脑子浆糊了,我举报,哈!最后,我觉得这个改写过程,正是C语言学习必经的,祝楼主早日成为心中有C,手中无C的C剑客
2007年09月07日 03点09分 14
level 6
文刀2鸟 楼主
感谢吧主加精啊,涕泪横流中..............感谢liupengty的点评,俺完全接受,我准备从第3条开始改起,先多改几个函数,哈。
2007年09月07日 07点09分 15
level 0
不错,一下就编译成功了(我用的是DEV CPP,工程选项的连接器加入-lwinmm参数)。不过我原以为是人机对弈,原来只是演示程序……
2007年10月10日 06点10分 16
level 1
人机对弈要实现电脑算法的,复杂的多尤其是对AI的设计
2007年10月10日 09点10分 17
level 0
真有难度
2007年10月11日 07点10分 18
level 1
汗 简单??/看都看不懂
2007年11月06日 09点11分 19
level 0
看不懂啊..牛哦..5555
2007年11月07日 02点11分 20
level 0
 
2007年12月11日 12点12分 21
1 2 3 尾页