成功了,我是菜鸟我怕谁,呵呵!
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 6
文刀2鸟 楼主
替换过了,从vc6.0拷贝出来的时候可能有好多tab,没有替换掉,就成了上面的样子,呵呵
2007年09月05日 13点09分 8
level 6
文刀2鸟 楼主
立正。
2007年09月06日 05点09分 9
level 6
文刀2鸟 楼主
感谢吧主加精啊,涕泪横流中..............感谢liupengty的点评,俺完全接受,我准备从第3条开始改起,先多改几个函数,哈。
2007年09月07日 07点09分 15
level 6
文刀2鸟 楼主
到此一游
2007年12月12日 03点12分 22
level 6
文刀2鸟 楼主
报道,向km,wd,大鸟,assiss,liupengty,sm,leeory.......问好!
2008年01月04日 06点01分 25
level 6
文刀2鸟 楼主
好好好,哈!
2008年01月04日 08点01分 27
1