btwin.cpp
来自「网络战船游戏」· C++ 代码 · 共 260 行
CPP
260 行
/*
* Batalla Naval - Cliente para Win16
* por Horacio Pe馻
*/
#include "btwin.h"
struct tagstatus {
char Bar4,Bar3,Bar2,Bar1;
} ;
typedef struct tagstatus status;
typedef char tablero[100];
typedef char nomjug[22];
void inline Linea(HDC hdc,int orgx,int orgy,int desx,int desy) {MoveTo(hdc,orgx,orgy);LineTo(hdc,desx,desy);}
/* Variables globales*/
char szProgName[]="Batalla Naval para Win16";
char tab []="Control para tableros";
char stat []="Control para status";
WSADATA Wsadata;
SOCKET sock;
HINSTANCE hInstancia;
int estado=BTW_NO_CONECTADO;
HWND VentPrinc;
char servidor[200];
int puerto;
nomjug jugador;
char tmp_gethost[MAXGETHOSTSTRUCT];
char Error[250];
char jug;
struct protocolo proto;
tablero tableros[6];
nomjug jugadores[5];
status sta[5];
#pragma argsused
int PASCAL WinMain(HINSTANCE hInst,HINSTANCE hPreInst,
LPSTR lpszCmdLine,int nCmdShow)
{
MSG lpMsg;
WNDCLASS wcApp;
int tmp,tmp2;
hInstancia=hInst;
for(tmp2=0;tmp2<6;tmp2++)
for(tmp=0;tmp<100;tmp++)
tableros[tmp2][tmp]=0;
for(tmp=0;tmp<5;tmp++)
{sta[tmp].Bar4=-1;sta[tmp].Bar3=-1,sta[tmp].Bar2=-1,sta[tmp].Bar1=-1;}
if (!hPreInst) {
wcApp.lpszClassName=szProgName;
wcApp.hInstance =hInst;
wcApp.lpfnWndProc =WndProc;
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
wcApp.hIcon =LoadIcon(hInst,"1");
wcApp.lpszMenuName =NULL;
wcApp.hbrBackground=GetStockObject(WHITE_BRUSH);
wcApp.style =CS_HREDRAW|CS_VREDRAW;
wcApp.cbClsExtra =0;
wcApp.cbWndExtra =0;
if (!RegisterClass (&wcApp)) {
sprintf(Error,"Error registrando clase %s",wcApp.lpszClassName);
MessageBox(NULL,Error,szProgName,MB_ICONSTOP);
return FALSE;
}
wcApp.lpszClassName=tab;
wcApp.hInstance =hInst;
wcApp.lpfnWndProc =tabProc;
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
wcApp.hIcon =NULL;
wcApp.lpszMenuName =NULL;
wcApp.hbrBackground=GetStockObject(WHITE_BRUSH);
wcApp.style =CS_HREDRAW|CS_VREDRAW;
wcApp.cbClsExtra =0;
wcApp.cbWndExtra =sizeof(LONG)*2;
if (!RegisterClass (&wcApp)) {
sprintf(Error,"Error registrando %s",wcApp.lpszClassName);
MessageBox(NULL,Error,szProgName,MB_ICONSTOP);
return FALSE;
}
wcApp.lpszClassName=stat;
wcApp.hInstance =hInst;
wcApp.lpfnWndProc =staProc;
wcApp.hCursor =LoadCursor(NULL,IDC_ARROW);
wcApp.hIcon =NULL;
wcApp.lpszMenuName =NULL;
wcApp.hbrBackground=GetStockObject(WHITE_BRUSH);
wcApp.style =CS_HREDRAW|CS_VREDRAW;
wcApp.cbClsExtra =0;
wcApp.cbWndExtra =sizeof(LONG)*2;
if (!RegisterClass (&wcApp)) {
sprintf(Error,"Error registrando %s",wcApp.lpszClassName);
MessageBox(NULL,Error,szProgName,MB_ICONSTOP);
return FALSE;
}
}
tmp=WSAStartup(0x101,&Wsadata);
if(tmp!=0) {
sprintf(Error,"Error en WSAStartup: %d",tmp);
MessageBox(NULL,Error,szProgName,MB_ICONSTOP);
return 0;
}
sock=0;
sock=socket(PF_INET,SOCK_STREAM,0);
if(sock==INVALID_SOCKET) {
sprintf(Error,"Error en socket: %d",WSAGetLastError());
MessageBox(NULL,Error,szProgName,MB_ICONSTOP);
WSACleanup();
return 0;
}
VentPrinc=CreateWindow(szProgName,szProgName,
WS_CAPTION|WS_CLIPCHILDREN|WS_MAXIMIZE|
WS_MINIMIZEBOX|WS_POPUPWINDOW|WS_VISIBLE,
0,0,640,480,
(HWND)NULL,(HMENU)NULL,
(HANDLE)hInstancia,(LPSTR)NULL);
ShowWindow(VentPrinc,nCmdShow);
UpdateWindow(VentPrinc);
while (GetMessage(&lpMsg,NULL,NULL,NULL)) {
TranslateMessage(&lpMsg);
DispatchMessage(&lpMsg);
}
if(estado>=BTW_CONECTADO)
bnwrite(sock,"",BNEXT,0,0,jug);
closesocket(sock);
WSACleanup();
return(lpMsg.wParam);
}
LONG FAR PASCAL WndProc(HWND hWnd,UINT messg,
WPARAM wParam,LPARAM lP)
{
DLGPROC dlgproc;
PAINTSTRUCT ps;
HDC hdc;
/* para conectar */
u_long addr;
sockaddr_in ca;
int i,j;
switch (messg)
{
case WM_CREATE:
CreateWindow("button","Conectar",WS_VISIBLE|BS_PUSHBUTTON|
WS_CHILD, 40,420,160,35,hWnd,(HMENU)ID_Accion,
hInstancia, NULL);
CreateWindow("button","Enviar Mensaje",WS_VISIBLE|BS_PUSHBUTTON|
WS_CHILD|WS_DISABLED,240,420,160,35,hWnd,
(HMENU)ID_Mensaje, hInstancia, NULL);
CreateWindow("button","Salir",WS_VISIBLE|BS_PUSHBUTTON|
WS_CHILD,440,420,160,35,hWnd,(HMENU)ID_Salir,
hInstancia, NULL);
CreateWindow("static","No conectado",WS_VISIBLE|WS_BORDER|
WS_CHILD,30,380,580,20,hWnd,(HMENU)ID_Txtmsj,
hInstancia, NULL);
CreateWindow(tab,"",WS_VISIBLE|WS_CHILD,
39, 24,161,161,hWnd,(HMENU)ID_tab+1,
hInstancia, (void*) MAKELONG(1,ID_tab+1));
CreateWindow("static","",WS_VISIBLE|WS_CHILD|SS_RIGHT,
39, 6,161, 17,hWnd,(HMENU)ID_nom+1,
hInstancia, NULL);
CreateWindow(tab,"",WS_VISIBLE|WS_CHILD,
239, 24,161,161,hWnd,(HMENU)ID_tab+2,
hInstancia, (void*) MAKELONG(2,ID_tab+2));
CreateWindow("static","",WS_VISIBLE|WS_CHILD|SS_RIGHT,
239, 6,161, 17,hWnd,(HMENU)ID_nom+2,
hInstancia, NULL);
CreateWindow(tab,"",WS_VISIBLE|WS_CHILD,
440, 24,161,161,hWnd,(HMENU)ID_tab+3,
hInstancia, (void*) MAKELONG(3,ID_tab+3));
CreateWindow("static","",WS_VISIBLE|WS_CHILD|SS_RIGHT,
440, 6,161, 17,hWnd,(HMENU)ID_nom+3,
hInstancia, NULL);
CreateWindow(tab,"",WS_VISIBLE|WS_CHILD,
39,209,161,161,hWnd,(HMENU)ID_tab+4,
hInstancia, (void*) MAKELONG(4,ID_tab+4));
CreateWindow("static","",WS_VISIBLE|WS_CHILD|SS_RIGHT,
39,191,161, 14,hWnd,(HMENU)ID_nom+4,
hInstancia, NULL);
CreateWindow(tab,"",WS_VISIBLE|WS_CHILD,
239,209,161,161,hWnd,(HMENU)ID_tab+5,
hInstancia, (void*) MAKELONG(5,ID_tab+5));
CreateWindow("static","",WS_VISIBLE|WS_CHILD|SS_RIGHT,
239,191,161, 14,hWnd,(HMENU)ID_nom+5,
hInstancia, NULL);
CreateWindow(stat,"",WS_VISIBLE|WS_CHILD,
440,209,161,161,hWnd,(HMENU)ID_sta,
hInstancia, (void*) MAKELONG(0,ID_sta));
break;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
MoveTo(hdc, 0,410);
LineTo(hdc,640,410);
ValidateRect(hWnd,NULL);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch( wParam ) {
case ID_Accion:
switch( estado ) {
case BTW_NO_CONECTADO: /* Conectar */
dlgproc= (DLGPROC) MakeProcInstance(
(FARPROC) DConectar,
hInstancia);
if(DialogBox(hInstancia,"CONECTAR_A",
hWnd,dlgproc)) {
EnableWindow(GetDlgItem(hWnd,ID_Accion),
FALSE);
estado=BTW_BUSCANDO_SERVER;
sprintf(Error,"Haciendo busqueda en DNS");
SetDlgItemText(hWnd,ID_Txtmsj,Error);
} /* if(Dialog) */
break;
case BTW_CONECTADO: /* Mandar tablero */
dlgproc= (DLGPROC) MakeProcInstance(
(FARPROC) DMandtab,
hInstancia);
if(DialogBox(hInstancia,"MANDARTAB",
hWnd,dlgproc)) {
EnableWindow(GetDlgItem(hWnd,ID_Accion),
FALSE);
estado=BTW_TABLERO_MANDADO;
sprintf(Error,"Tablero mandado. Esperando respuesta.");
SetDlgItemText(hWnd,ID_Txtmsj,Error);
} /* if(Dialog) */
break;
case BTW_LISTO:
bnwrite(sock,"",BNSTR,0,0,jug);
EnableWindow(GetDlgItem(hWnd,ID_Accion),
FALSE);
estado=BTW_EMPEZANDO;
sprintf(Error,"Vamos a jugar.");
SetDlgItemText(hWnd,ID_Txtmsj,Error);
break;
} /* switch(estado) */
break; /* case ID_Accion */
case ID_Mensaje:
dlgproc= (DLGPROC) MakeProcInstance(
(FARPROC) DMensaje,
hInstancia);
DialogBox(hInstancia,"MANDARMSJ",
NULL,dlgproc);
break;
case ID_Salir:
DestroyWindow(hWnd);
break;
case ID_tab+1:
case ID_tab+2:
case ID_tab+3:
case ID_tab+4:
case ID_tab+5:
if(estado!=BTW_MI_TURNO) {
if(estado==BTW_JUGANDO)
sprintf(Error,"
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?