⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gbnclient.c

📁 网络战船游戏
💻 C
📖 第 1 页 / 共 4 页
字号:
/* * Batalla Naval (c) 1995,96,97,98 Ricardo Quesada * (rquesada@dc.uba.ar) *  * Cliente X - GTK * Version: pre-0.60-31 *   * Depende de las librerias GTK * * - Obviamente el codigo es casi el mismo que del cliente Xview, Okay ? *   aunque espero que sea un cacho mas estable * - Perdon, creo que vario muchisimo del cliente XView, a si que no es casi *   igual, Okay ? * - Bueno, esta bien. * *//* * pre-0.60-1/3   xx/09/97 - Jugar con las GTK * pre-0.60-4     xx/09/97 - Crear pantalla * ... despues de los examenes ... * pre-0.60-5     27/12/97 - Usar pixmaps * pre-0.60-6     28/12/97 - Uh? * ... despues de las vacaciones ... * pre-0.60-7     13/02/98 - Un buen rato despues... connect y etc. * pre-0.60-8     14/02/98 - Connect y Disconnect y Status * pre-0.60-9     14/02/98 - Send Board y Start y vscrollbar * pre-0.60-10    16/02/98 - Right panel, hit and otras boludeces. * pre-0.60-11    19/02/98 - Mas pixmaps y otras bellas cosas (algo jugable). * pre-0.60-12    21/02/98 - Probe scrolled_window... pero no. Saque table * pre-0.60-13    23/02/98 - Parti en 2 el codigo... * pre-0.60-14    01/03/98 - Hacer algo mas, no ? * pre-0.60-15    01/03/98 - Funciona el juego joya. Espero * pre-0.60-16    03/03/98 - Uni de nuevo el codigo en un solo archivo. *                           Pude arreglar el problema de las notebooks *                           con las nuevas GTK 0.99.4 - Anda vieja. * pre-0.60-17    04/03/98 - Anda la opcion de config * pre-0.60-18    04/03/98 - Mensajes y esas porquerias * pre-0.60-19    04/03/98 - Porquerias con las notebooks * pre-0.60-20    05/03/98 - Tratar de arreglar las putas notebooks * pre-0.60-21    07/03/98 - Encontre el puto bug que no me dejaba dormir *                           buscar en el codigo por "puto bug" * pre-0.60-22    07/03/98 - ? * pre-0.60-23    07/03/98 - Jugable... * pre-0.60-24    08/03/98 - Pixmaps inside * pre-0.60-25    08/03/98 - Un nuevo help * pre-0.60-26    08/03/98 - Uso los pixmaps the GameOver y Winner * pre-0.60-27    08/03/98 - Tiene icono * pre-0.60-28    09/03/98 - No tiene mas menu y actualiza el vscrollbar * pre-0.60-29    10/03/98 - Algunos detalles y check button en bnsendmsg * pre-0.60-30    17/03/98 - Agregar el popup a las notebooks, y los tooltips * pre-0.60-31    18/03/98 - Otro status bar abajo ( left y right ) *//* ---- Includes Generales ---- */#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <unistd.h>#include <netdb.h>#include <stdio.h>#include <syslog.h>#include <errno.h>#include <string.h>/* ---- Includes propios de la Interface ---- */#include <gtk/gtk.h>/* ---- Includes propios del Juego ---- */#include "../share/protocol.h"#include "cliente.h"#include "pixmaps.h"/* * Funciones de manejo de pantalla y otras */static void ttyfill(char msg[]){   gchar messg[100];   gfloat new_value ;      strncpy(messg,msg,100);      gtk_text_freeze(GTK_TEXT(text));   gtk_widget_realize(text);   gtk_text_insert( GTK_TEXT(text),NULL,NULL,NULL,messg,-1);   gtk_text_thaw(GTK_TEXT(text));      /* tendria que encontrar la manera de que sea automatico el valor este */   if( GTK_RANGE( vscrollbar )->adjustment->upper >= 154 )     {	new_value = GTK_RANGE( vscrollbar )-> adjustment->upper - 154;	GTK_RANGE(vscrollbar)->adjustment->value = new_value;	GTK_RANGE(vscrollbar)->timer = 0; /* para que sirver ? */	gtk_signal_emit_by_name (GTK_OBJECT (GTK_RANGE(vscrollbar)->adjustment), "value_changed");     }}static void pmicell(int x,int y,int color){   if(x<10 && x>=0 && y>=0 && y<10)     {	switch( color )	  {	   case NOBARCO:	     gdk_draw_pixmap( drawing_left->window,			     drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],			     fondo,			     x*ANCHO+1,y*LARGO+1,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   case AGUA:	     gdk_draw_pixmap( drawing_left->window,			     drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],			     azul,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   case BARCO:	     gdk_draw_pixmap( drawing_left->window,			     drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],			     verde,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   case TOCADO:	     gdk_draw_pixmap( drawing_left->window,			     drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],			     rojo,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   case HUNDIDO:	     gdk_draw_pixmap( drawing_left->window,			     drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],			     negro,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   default:	     gdk_draw_pixmap( drawing_left->window,			     drawing_left->style->fg_gc[GTK_WIDGET_STATE(drawing_left)],			     negro,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	  }     }}static void ptucell(int x,int y,int color){   gint i;      if(x<10 && x>=0 && y>=0 && y<10)     {	i = gtk_notebook_current_page( GTK_NOTEBOOK( notebook_right ) );	i = usuario.pages[ i ] ;  /* puto bug resuelto */	switch( color )	  {	   case NOBARCO:	     gdk_draw_pixmap( drawing_right[i]->window,			     drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],			     fondo,			     x*ANCHO+1,y*LARGO+1,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   case AGUA:	     gdk_draw_pixmap( drawing_right[i]->window,			     drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],			     azul,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   case BARCO:	     gdk_draw_pixmap( drawing_right[i]->window,			     drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],			     verde,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   case TOCADO:	     gdk_draw_pixmap( drawing_right[i]->window,			     drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],			     rojo,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   case HUNDIDO:	     gdk_draw_pixmap( drawing_right[i]->window,			     drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],			     negro,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	   default:	     gdk_draw_pixmap( drawing_right[i]->window,			     drawing_right[i]->style->fg_gc[GTK_WIDGET_STATE(drawing_right[i])],			     negro,			     0,0,			     x*ANCHO+1,y*LARGO+1,			     ANCHO-1,LARGO-1);	     break;	     	  }     }}static void foot_right( char* text ){   gtk_statusbar_pop(  GTK_STATUSBAR(statusbar_right), 1 );   gtk_statusbar_push( GTK_STATUSBAR(statusbar_right), 1, text);}static void foot_left( char* text ){   gtk_statusbar_pop(  GTK_STATUSBAR(statusbar_left), 1 );   gtk_statusbar_push( GTK_STATUSBAR(statusbar_left), 1, text);}/* Funcion que saca a un usuario */gint sacar_usrpage( gint jugador ){   gint i,j,k;      j=32; /* no es nada esto, pero sirve para el debug */      for(i=0;i<MAXPLAYER;i++)     {	if (usuario.pages[i]==jugador)	  {	     j=i;	     for( k=i; k < (MAXPLAYER-1); k++ )	       {		  usuario.pages[k]=usuario.pages[k+1];	       }	     usuario.pages[MAXPLAYER-1]=-32;	  }     }   return j;}/* Funcion que busca un usuario en una page */gint buscar_usr( gint usr ){   gint i,j;   j=-20;   for(i=0;i<MAXPLAYER;i++)     {	if(usuario.pages[i]==usr)	  {	     j=i;	     break;	  }     }   return j;}/* Funcion que pone el Help */static void h2o(char messg[]){   gtk_text_freeze(GTK_TEXT(text_help));   gtk_widget_realize(text_help);   gtk_text_insert( GTK_TEXT(text_help),NULL,NULL,NULL,messg,-1);   gtk_text_thaw(GTK_TEXT(text_help));}void bn_help( void ){   h2o("BATALLA NAVAL -\n"       "\tHIDE,HELP & CREDITS"       "\n\n\n"        "HIDE\n"       "Use this option to hide your ships from your enemies, "       "in case you are playing in the same room with them, of course."       "\n\n\n"       "HELP\n"       "First you must fill your board. Press 'My board' in this "       "notebook, and complete it with:\n"       " - 4 ships of 1 unit\n"       " - 3 ships of 2 units\n"       " - 2 ships of 3 units\n"       " - 1 ship of 4 units\n"       "\n"       "Remember that the ships must be put horizontally or vertically "       "only, and that they must be one cell away from the others ships.\n"       "Then 'Connect' to the server, if there is an error 'Config' your client.\n"       "Then 'Send-your-Board' to the server and wait others players. "       "You can view the 'Status' of the server, "       "and when there are enough players 'Start' the game. OK?"       "\n\n\n"       "CREDITS\n"       "Un-original idea by:\n"       "Sebastian Cativa Tolosa & Ricardo Quesada\n\n"       "Server, GTK Client, XView Client & ncurses Client by:\n"       "Ricardo Quesada\n\n"       "Win 16 client & bugfixes by:\n"       "Horacio Pe馻\n\n"       "\n\n\n"       "e-mail's:\n"       "Sebastian Cativa Tolosa\n(scativa@dc.uba.ar)\n\n"       "Horacio Pe馻\n(horape@century.com.ar)\n\n"       "Ricardo Quesada\n(rquesada@dc.uba.ar)\n\n"       );   }/**************************************************************************** *                     FUNCIONES DE LOS EVENTOS DEL MOUSE ****************************************************************************//* Left */static gint expose_event (GtkWidget *widget, GdkEventExpose *event){   gint i,j;      for(i=0;i<10;i++)     {	for(j=0;j<10;j++)	  {	     pmicell( i,j, mitabla[i][j] );	  }     }      /* Dibuja las lineas */   for(i=0;i<10;i++)     {	gdk_draw_line (widget->window,		       widget->style->black_gc,		       0,LARGO*i,		       ANCHO*10,LARGO*i);	gdk_draw_line (widget->window,		       widget->style->black_gc,		       ANCHO*i,0,		       ANCHO*i,LARGO*10);     }      return FALSE;}// Se馻l PRESS_BUTTONstatic gint button_press_event (GtkWidget *widget, GdkEventButton *event){   gint x,y;      x=event->x / ANCHO;   y=event->y / LARGO;         if( usuario.play >=3 )     {	ttyfill("Hey, What are you trying to do ?\n");	return TRUE;     }   else if( usuario.play ==2 )     {	ttyfill("I'm sorry but you can't modify your board right now.\n");	return TRUE;     }      if ( event->button == 1 )     {	gdk_draw_pixmap( widget->window,			widget->style->fg_gc[GTK_WIDGET_STATE(widget)],			verde,			0,0,			x*ANCHO+1,y*LARGO+1,			ANCHO-1,LARGO-1);	mitabla[x][y]=1;     }   else if ( event->button == 3 )     {	gdk_draw_pixmap( widget->window,			widget->style->fg_gc[GTK_WIDGET_STATE(widget)],			fondo,			x*ANCHO+1,y*LARGO+1,			x*ANCHO+1,y*LARGO+1,			ANCHO-1,LARGO-1);				  	mitabla[x][y]=0;     }		   return TRUE;}/* Right About */static gint expose_event_about (GtkWidget *widget, GdkEventExpose *event){   gdk_draw_pixmap( widget->window,		   widget->style->fg_gc[GTK_WIDGET_STATE(widget)],		   about,		   0,0,		   0,0,		   200,200		   );   return FALSE;}/* Right, page switch */static gint page_switch (GtkWidget *widget, GtkNotebookPage *page, gint page_num){   gchar outbuf[MSGMAXLEN];      if( usuario.play>=3 )     {	usuario.usrfrom = usuario.pages[ page_num ] + 1;	bnwrite(sock,outbuf,BNREA,usuario.usrfrom,bnsup,usuario.numjug);     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -