这是一个很经典的游戏系列,在我本科的时候,常常和同学一起游戏,通宵达旦,比拼谁能早日统一全中国。游戏里可以自建武将,但是挑来跳去,很难挑到一个武力高强,又不是白痴的人物。于是乎,偶就偷偷摸摸翻了几本c语言的教程,写了一段小程序,用来修改自建武将的资料。现在看来,那个时候面向过程的编程方法着实可爱 : ) 源代码如下:
下载:
sango.c
#include
"
stdio.h
"
/*这里需要填写各武将的资料*/
struct genenral
{
long position ;
int wuli ;
int zhili ;
int dengchang ;
int tili ;
int jili ;
int nannv ;
} genrl [ 50 ] ;
save ( FILE * fp , int i )
{
fseek ( fp , - 1 L , 1 ) ;
printf ( " %-6d " , i ) ;
genrl [ i ] . position = ftell ( fp ) ;
genrl [ i ] . wuli = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d " , genrl [ i ] . wuli ) ;
genrl [ i ] . zhili = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d " , genrl [ i ] . zhili ) ;
genrl [ i ] . dengchang = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
genrl [ i ] . tili = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d " , genrl [ i ] . tili ) ;
genrl [ i ] . jili = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d " , genrl [ i ] . jili ) ;
genrl [ i ] . nannv = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d \ n " , genrl [ i ] . nannv ) ;
}
writeback ( FILE * fp , int i )
{
fseek ( fp , genrl [ i ] . position , 0 ) ;
fputc ( genrl [ i ] . wuli , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . zhili , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . dengchang , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . tili , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . jili , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . nannv , fp ) ;
fseek ( fp , 1 L , 1 ) ;
}
main ()
{
int i , t ;
FILE * fp ;
if (( fp = fopen ( " NewGen~1.sav " , " rb+ " )) == NULL )
{
printf ( " no saved file! \ n " ) ;
printf ( " 该程序在Win98下测试通过,请将其拷贝到Sango3存档目录下使用 \ n " ) ;
printf ( " 制作:http://isdox.com \ n " ) ;
getch () ;
}
else
{
printf ( " 制作:http://isdox.com \ n " ) ;
printf ( " 下面是自建武将内容: \ n " ) ;
for ( ;; )
{
printf ( " 序号 武力 智力 体力 技力 男女 \ n " ) ;
rewind ( fp ) ;
fseek ( fp , 116 L , 0 ) ;
for ( i = t = 0 ; i & lt ; 50 ; i ++ )
{
if (( fgetc ( fp )) != 0 )
{
save ( fp , t ) ;
fseek ( fp , 50 L , 1 ) ;
t ++;
}
else
fseek ( fp , 61 L , 1 ) ;
}
getch () ;
printf ( " 请输入要修改的武将序号,若要退出请输入-1 " ) ;
scanf ( " %d " , & amp ; i ) ;
if ( i & lt ; 0 || i & gt ; 49 )
break ;
else
{
printf ( " 武力=%-3d,修改y/n? " , genrl [ i ] . wuli ) ;
getchar () ;
if ( getchar () == ' y ' )
{
printf ( " \ t武力=? " ) ;
scanf ( " %d " , & amp ; t ) ;
if ( t & lt ; 1 || t & gt ; 255 )
t = 255 ;
genrl [ i ] . wuli = t ;
}
printf ( " 智力=%-3d,修改y/n? " , genrl [ i ] . zhili ) ;
getchar () ;
if ( getchar () == ' y ' )
{
printf ( " \ t智力=? " ) ;
scanf ( " %d " , & amp ; t ) ;
if ( t & lt ; 1 || t & gt ; 255 )
t = 255 ;
genrl [ i ] . zhili = t ;
}
printf ( " 体力=%-3d,修改y/n? " , genrl [ i ] . tili ) ;
getchar () ;
if ( getchar () == ' y ' )
{
printf ( " \ t体力=? " ) ;
scanf ( " %d " , & amp ; t ) ;
if ( t & lt ; 1 || t & gt ; 255 )
t = 255 ;
genrl [ i ] . tili = t ;
}
printf ( " 技力=%-3d,修改y/n? " , genrl [ i ] . jili ) ;
getchar () ;
if ( getchar () == ' y ' )
{
printf ( " \ t技力=? " ) ;
scanf ( " %d " ,& amp ; t ) ;
if ( t & lt ; 1 || t & gt ; 255 )
t = 255 ;
genrl [ i ] . jili = t ;
}
writeback ( fp , i ) ;
}
}
}
fclose ( fp ) ;
}
/*这里需要填写各武将的资料*/
struct genenral
{
long position ;
int wuli ;
int zhili ;
int dengchang ;
int tili ;
int jili ;
int nannv ;
} genrl [ 50 ] ;
save ( FILE * fp , int i )
{
fseek ( fp , - 1 L , 1 ) ;
printf ( " %-6d " , i ) ;
genrl [ i ] . position = ftell ( fp ) ;
genrl [ i ] . wuli = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d " , genrl [ i ] . wuli ) ;
genrl [ i ] . zhili = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d " , genrl [ i ] . zhili ) ;
genrl [ i ] . dengchang = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
genrl [ i ] . tili = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d " , genrl [ i ] . tili ) ;
genrl [ i ] . jili = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d " , genrl [ i ] . jili ) ;
genrl [ i ] . nannv = fgetc ( fp ) ;
fseek ( fp , 1 L , 1 ) ;
printf ( " %-6d \ n " , genrl [ i ] . nannv ) ;
}
writeback ( FILE * fp , int i )
{
fseek ( fp , genrl [ i ] . position , 0 ) ;
fputc ( genrl [ i ] . wuli , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . zhili , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . dengchang , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . tili , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . jili , fp ) ;
fseek ( fp , 1 L , 1 ) ;
fputc ( genrl [ i ] . nannv , fp ) ;
fseek ( fp , 1 L , 1 ) ;
}
main ()
{
int i , t ;
FILE * fp ;
if (( fp = fopen ( " NewGen~1.sav " , " rb+ " )) == NULL )
{
printf ( " no saved file! \ n " ) ;
printf ( " 该程序在Win98下测试通过,请将其拷贝到Sango3存档目录下使用 \ n " ) ;
printf ( " 制作:http://isdox.com \ n " ) ;
getch () ;
}
else
{
printf ( " 制作:http://isdox.com \ n " ) ;
printf ( " 下面是自建武将内容: \ n " ) ;
for ( ;; )
{
printf ( " 序号 武力 智力 体力 技力 男女 \ n " ) ;
rewind ( fp ) ;
fseek ( fp , 116 L , 0 ) ;
for ( i = t = 0 ; i & lt ; 50 ; i ++ )
{
if (( fgetc ( fp )) != 0 )
{
save ( fp , t ) ;
fseek ( fp , 50 L , 1 ) ;
t ++;
}
else
fseek ( fp , 61 L , 1 ) ;
}
getch () ;
printf ( " 请输入要修改的武将序号,若要退出请输入-1 " ) ;
scanf ( " %d " , & amp ; i ) ;
if ( i & lt ; 0 || i & gt ; 49 )
break ;
else
{
printf ( " 武力=%-3d,修改y/n? " , genrl [ i ] . wuli ) ;
getchar () ;
if ( getchar () == ' y ' )
{
printf ( " \ t武力=? " ) ;
scanf ( " %d " , & amp ; t ) ;
if ( t & lt ; 1 || t & gt ; 255 )
t = 255 ;
genrl [ i ] . wuli = t ;
}
printf ( " 智力=%-3d,修改y/n? " , genrl [ i ] . zhili ) ;
getchar () ;
if ( getchar () == ' y ' )
{
printf ( " \ t智力=? " ) ;
scanf ( " %d " , & amp ; t ) ;
if ( t & lt ; 1 || t & gt ; 255 )
t = 255 ;
genrl [ i ] . zhili = t ;
}
printf ( " 体力=%-3d,修改y/n? " , genrl [ i ] . tili ) ;
getchar () ;
if ( getchar () == ' y ' )
{
printf ( " \ t体力=? " ) ;
scanf ( " %d " , & amp ; t ) ;
if ( t & lt ; 1 || t & gt ; 255 )
t = 255 ;
genrl [ i ] . tili = t ;
}
printf ( " 技力=%-3d,修改y/n? " , genrl [ i ] . jili ) ;
getchar () ;
if ( getchar () == ' y ' )
{
printf ( " \ t技力=? " ) ;
scanf ( " %d " ,& amp ; t ) ;
if ( t & lt ; 1 || t & gt ; 255 )
t = 255 ;
genrl [ i ] . jili = t ;
}
writeback ( fp , i ) ;
}
}
}
fclose ( fp ) ;
}
存档文件下载在这里
c, code, 三国群英传, 游戏修改
