【SQL编程游戏】编写一个会划拳的机器人参加擂台赛,规则内详。路过有分。

时间:2021-08-21 17:19:12
该游戏在c#版玩得风风火火,现在根据伴水的规则和框架代码来个SQLServer的盗版。
正版游戏参见:http://topic.csdn.net/u/20080421/17/6a4d1c20-e1d1-4e9d-99ae-d648cb422ca6.html

 
划拳又叫豁拳、猜枚、猜拳、拇战,即饮酒时两人同时伸出手指并各说一个数,谁说的数目跟双方所伸手指的总数相符,谁就算赢,输的人喝酒。此乃我国 
古传至今仍时尚流行的饮酒游戏,它增添酒兴,烘托喜庆,是一种民间的酒令。 其技巧性颇强,给玩者留有神机斗智的余地,且因玩时须喊叫,易让人兴奋,极富竞争性。 
  两人同时伸出一只手,用攥起的拳头和伸出一到五个手指,表示从零到五这几个数字,与此同时,嘴里喊出从零到10的数字,如果两人伸出的手指表示的数字相加与其中一个 
人嘴里喊出的数字相同,那么这个人就算赢了这一拳。举例说明:比如一个人伸出了三个手指,另一个人伸出了四个手指,一个人喊了七,另一个喊了六,那么这个人喊七的人就赢 
了;如一个人伸出攥紧的拳头(表示零),嘴里喊出了三,而另一个恰好伸出了三个手指可嘴里喊的七,那么喊三的就赢了。就这么简单。当然,如果自己喊的是“八仙过海”, 
而自己仅伸出了一个手指,那么对方即使伸出五指也不可能凑成八,这种拳就叫臭拳,如果不是事先约定,是要罚酒的。


划拳规则看完了,那我们就开始写一个会划拳的机器人吧! 

    那么一个会划拳的机器会做什么事情呢?其实就是两件: 
第一件、出拳,即:自己出几个手指?自己猜合计是多少。 
第二件、知道划拳的结果,即:对方出几个手指,对方猜合计是多少,是否获胜还是平局还是其他。

只要完成 id_init,id_come,id_comeout这三个存储过程,你就拥有一个会划拳的机器人,参与这个游戏了!

【游戏规则】 
1、比赛共1000局,即:出现胜负算一局,如出拳100次没有结果也算一局并双方均不得分; 
2、赢一局得1分、输不扣分; 
3、这里暂时不引入异常处罚机制,如果你的代码发生异常请自觉认输; 
4、机器人执行中反应超时2000毫秒直接判负,每超时300毫秒,扣1分,超时10次直接判负; 
5、自己得分高于对手并大于600分判胜; 
6、自己得分为正数对手得分为负数判胜; 
7、其他情况则判平。 
具体执行的过程,算法的过程请参考game_huaquan的实现 

【入门提示】 
1、机器人的命名规范是: <自己的id> +  <第几个> + "号",如:Zswang一号、Zswang二号,当然你也可以用“长江七号” 
2、不允许修改game_huaquan存储过程
3、机器人必须实现id_init,id_come,id_comeout三个过程; 
4、分析擂主代码是战胜擂主的关键; 
5、打擂容易守擂难,大家*发挥吧! 
【擂台赛规则】 
1、第一个打败擂主的机器人奖励20分,并成为新的擂主; 
2、自己不能挑战自己编写的机器人; 
3、受大家关注的有价值擂主获得100专家分,发帖另付; 
4、其余分数酌情散掉。 
5、这个可视为技术帖,所有专家分均指技术分,如果本人可用分不够还望财主们捐点。

我的代码是SQL2005下写的,而且没有严格测试过,标准代码和比赛规则有什么不妥或者建议欢迎讨论,谢谢关注
(调试代码参考后面两帖,-_-!!!代码有点多,先别抢沙发。。。。)

划拳平台2代:参考67楼代码 
比赛:exec game_huaquan '机器人1ID','机器人2ID' 
改进: 
1、增加了全局变量,可以在初始化时负值,只有自己的机器人可以看到值。 
2、增加了回收存储过程。 
3、可以不定义初始化、查看结果和回收的存储过程。 
4、检测了机器人是否定义。 

定义机器人:只要根据需要定义四个存储过程

105 个解决方案

#1


本帖最后由 jinjazz 于 2008-04-29 01:07:38 编辑
use tempdb
go

--主控过程:
--作者主页:http://blog.csdn.net/jinjazz
--参数说明:两个参数为两个酒鬼ID
--调用示例: exec game_huaquan 'jinjazz1','jinjazz2'
if(object_id('game_huaquan') is not null) 
drop procedure game_huaquan
go
create procedure game_huaquan (@eastid nvarchar(100),@westid nvarchar(100))
as
begin
--出拳和输出的动态sql语句变量
declare @east_come nvarchar(1000),@west_come nvarchar(1000)
declare @east_comeout nvarchar(1000),@west_comeout nvarchar(1000)
--两酒鬼的出拳和所叫数值定义
declare @east_finger int,@east_sum int,@west_finger int,@west_sum int
--分数定义
declare @east_score int, @west_score int
--结果定义
declare @east_result nvarchar(10) , @west_result nvarchar(10)
--超时控制变量定义
declare @east_time int ,@west_time int,@east_timestart datetime,@west_timestart datetime,
@east_timecount int, @west_timecount int
--循环定义
declare @i int,@j int
declare @break_j int, @break_i int

--初始化定义变量
set @east_timecount=0 set @west_timecount=0
set @east_score=0 set @west_score=0
set @break_j=0 set @break_i=0

set @i=0;set @j=0
     
--初始化两酒鬼
set @east_timestart=getdate()
exec (@eastid+'_init')
set @east_time=datediff(ms,@east_timestart,getdate())

set @west_timestart=getdate()
exec (@westid+'_init')
set @west_time=datediff(ms,@west_timestart,getdate())

--初始化超时判断
if(@east_time>1000 or @west_time>1000)
set @break_i=1

--开始比赛
while(@i<1000 and @break_i=0)
begin
set @break_j=0
set @j=0
while(@j<100 and @break_j=0)
begin
set @east_result='未知' set @west_result='未知'
--东家酒鬼出拳
set @east_come='exec '+@eastid+'_come @east_finger out,@east_sum out'
set @east_timestart=getdate()
exec sp_executesql   
@east_come,   
N'@east_finger int  output,@east_sum int output',
@east_finger=@east_finger output,  @east_sum=@east_sum output
set @east_time=datediff(ms,@east_timestart,getdate())
--西家酒鬼出拳
set @west_come='exec '+@westid+'_come @west_finger out,@west_sum out'
set @west_timestart=getdate()
exec sp_executesql   
@west_come,   
N'@west_finger int  output,@west_sum int output',
@west_finger=@west_finger output,  @west_sum=@west_sum output
set @west_time=datediff(ms,@west_timestart,getdate())
--超时判断
if(@east_time>2000) 
set @east_timecount=999
else
if(@east_time>300) 
set @east_timecount=@east_timecount+1
if(@west_time>2000) 
set @west_timecount=999
else
if(@west_time>300) 
set @west_timecount=@west_timecount+1

if(@east_timecount>=10 or @west_timecount>=10)
begin
set @break_j=1 set @break_i=1
end
--犯规判断
if(@east_finger>5 or @east_finger<0 or @east_sum>10 or @east_sum<0 or 
@east_sum-@east_finger>5 or @east_sum<@east_finger or @east_finger is null or @east_sum is null)
set @east_result='犯规'
if(@west_finger>5 or @west_finger<0 or @west_sum>10 or @west_sum<0 or 
@west_sum-@west_finger>5 or @west_sum<@west_finger or @west_finger is null or @west_sum is null)
set @west_result='犯规'
--结果判断
if(@east_finger+@west_finger=@east_sum)
begin
set @east_result='胜'
end
if(@east_finger+@west_finger=@west_sum)
begin
set @west_result='胜'
end
if(@east_result=@west_result)
begin
set @east_result='平'
set @west_result='平'
end
else
begin
if(@east_result='犯规')set @west_result='胜' 
if(@east_result='胜')set @west_result='负'
if(@west_result='犯规')set @east_result='胜' 
if(@west_result='胜')set @east_result='负'
set @break_j=1
end
if(@east_result='胜') set @east_score=@east_score+1
if(@west_result='胜') set @west_score=@west_score+1

--输出结果

set @east_comeout='exec '+@eastid+
'_comeout @east_finger,@east_sum,@east_result,@west_finger,@west_sum,@west_result'
set @east_timestart=getdate()
exec sp_executesql   
@east_comeout,   
N'@east_finger int ,@east_sum int ,@east_result varchar(10),
@west_finger int,@west_sum int,@west_result  varchar(10)',
@east_finger=@east_finger,  @east_sum=@east_sum ,@east_result=@east_result,
@west_finger=@west_finger,  @west_sum=@west_sum ,@west_result=@west_result
set @east_time=datediff(ms,@east_timestart,getdate())
 
set @west_timestart=getdate()
set @west_comeout='exec '+@westid+
'_comeout @west_finger,@west_sum,@west_result,@east_finger,@east_sum,@east_result'
exec sp_executesql   
@west_comeout,   
N'@west_finger int,@west_sum int,@west_result  varchar(10),
@east_finger int ,@east_sum int ,@east_result varchar(10)',
@east_finger=@east_finger,  @east_sum=@east_sum ,@east_result=@east_result,
@west_finger=@west_finger,  @west_sum=@west_sum ,@west_result=@west_result
set @west_time=datediff(ms,@west_timestart,getdate())

--输出超时判断
if(@east_time>2000) 
set @east_timecount=999
else
if(@east_time>300) 
set @east_timecount=@east_timecount+1
if(@west_time>2000) 
set @west_timecount=999
else
if(@west_time>300) 
set @west_timecount=@west_timecount+1

if(@east_timecount>=10 or @west_timecount>=10)
begin
set @break_j=1 set @break_i=1
end
set @j=@j+1

end
set @i=@i+1
end
--输出最终结果
if (@east_time>1000)
print @eastid+'初始化严重超时'
if (@west_time>1000)
print @westid+'初始化严重超时'
if(@east_timecount=999)
print @eastid+'严重超时'
if(@east_timecount=10)
print @eastid+'超时达到10次'
if(@west_timecount=999)
print @westid+'严重超时'
if(@west_timecount=10)
print @westid+'超时达到10次'
if(@break_i=0)
print @eastid+'分数:'+cast( @east_score as varchar(100))+' vs '+ @westid+'分数:'+cast( @west_score as varchar(100))
end

go

#2


本帖最后由 jinjazz 于 2008-04-29 01:48:04 编辑
/*-----------
玩法很简单,只要仿照下面两个例子:
1、定义一个ID,比如:长江七号
2、完成三个过程:
初始化: 长江七号_init
出拳: 长江七号_come
查看结果: 长江七号_comeout
3、调用主控过程 exec game_huaquan '长江七号','jinjazz2'
4、等待系统结果显示
-----------*/


/*------------酒鬼jinjazz1-------*/

--初始化
if(object_id('jinjazz1_init') is not null) 
drop procedure jinjazz1_init
go
create procedure jinjazz1_init
as
begin
declare @empty int
--这机器人随时开战
end
go

--出拳
if(object_id('jinjazz1_come') is not null) 
drop procedure jinjazz1_come
go
create procedure jinjazz1_come(@finger int out,@sum int out)
as
begin
set @finger=5
set @sum=10;
end
go
---查看比赛结果
if(object_id('jinjazz1_comeout') is not null) 
drop procedure jinjazz1_comeout
go
create procedure jinjazz1_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
declare @empty int
--这机器人不关心比赛结果
end
go




/*------------酒鬼jinjazz2-------*/

--初始化
if(object_id('jinjazz2_init') is not null) 
drop procedure jinjazz2_init
go
create procedure jinjazz2_init
as
begin
declare @empty int
--这机器人随时开战
end
go

--出拳
if(object_id('jinjazz2_come') is not null) 
drop procedure jinjazz2_come
go
create procedure jinjazz2_come(@finger int out,@sum int out)
as
begin
set @sum=abs(checksum(newid()))%11;
if(@sum<5) --别犯规
set @finger=abs(checksum(newid()))%(@sum+1)
else
set @finger=@sum-5+abs(checksum(newid()))%6
end
go
---查看比赛结果
if(object_id('jinjazz2_comeout') is not null) 
drop procedure jinjazz2_comeout
go
create procedure jinjazz2_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
--这机器人不关心比赛结果
declare @empty int
end
go

#3


本帖最后由 jinjazz 于 2008-04-29 01:46:03 编辑
现在第一个擂主是jinjazz一号,欢迎大家来挑战

/*------------酒鬼jinjazz一号-------*/

--初始化
if(object_id('jinjazz一号_init') is not null) 
drop procedure jinjazz一号_init
go
create procedure jinjazz一号_init
as
begin
declare @empty int
--这机器人随时开战
end
go

--出拳
if(object_id('jinjazz一号_come') is not null) 
drop procedure jinjazz一号_come
go
create procedure jinjazz一号_come(@finger int out,@sum int out)
as
begin
set @sum=abs(checksum(newid()))%11;
if(@sum<5) --别犯规
set @finger=abs(checksum(newid()))%(@sum+1)
else
set @finger=@sum-5+abs(checksum(newid()))%6
end
go
---查看比赛结果
if(object_id('jinjazz一号_comeout') is not null) 
drop procedure jinjazz一号_comeout
go
create procedure jinjazz一号_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
--这机器人不关心比赛结果
declare @empty int
end
go

#4


强大

#5


哈哈,介绍的很详细,过几天来打擂

#6


好玩,还可以干这个

#7


不错不错

#8


没想过还有这个用处

#9


支持
加油

#10


jf

#11


学习

#12


接分

#13


先看看,,,

#14


好玩,我也要玩!

#15


Mark

#16


luguo.

#17


--主控过程:
--作者主页:http://blog.csdn.net/jinjazz
--参数说明:两个参数为两个酒鬼ID
--调用示例: exec game_huaquan 'jinjazz1','jinjazz2'
/*-----------
玩法很简单,只要仿照下面两个例子:
1、定义一个ID,比如:长江七号
2、完成三个过程:
        初始化:    长江七号_init
        出拳:        长江七号_come
        查看结果:    长江七号_comeout
3、调用主控过程    exec game_huaquan '长江七号','jinjazz2'
4、等待系统结果显示
-----------*/
if(object_id('cson1_init') is not null) 
drop procedure cson1_init
go
create procedure cson1_init
as
begin
    declare @empty int
    --这机器人随时开战
end
go

--出拳
if(object_id('cson1_come') is not null) 
drop procedure cson1_come
go
create procedure cson1_come(@finger int out,@sum int out)
as
begin
    declare @finger1 int
    set @finger1=abs(checksum(newid()))%6;
    set @finger =abs(checksum(newid()))%6;
    set @sum =@finger1+@finger
end
go
---查看比赛结果
if(object_id('cson1_comeout') is not null) 
drop procedure cson1_comeout
go
create procedure cson1_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
    --这机器人不关心比赛结果
    declare @empty int
--    print rtrim(@selfFinger)+','+rtrim(@seflSum)+','+rtrim(@selfResult)+','+rtrim(@oterFinger)+','+rtrim(@otherSum)+','+rtrim(@otherResult)
end
go

#18


哈哈,胜率100%
exec game_huaquan 'cson1','jinjazz一号'
exec game_huaquan 'cson1','jinjazz一号'
exec game_huaquan 'cson1','jinjazz一号'
exec game_huaquan 'cson1','jinjazz一号'
exec game_huaquan 'cson1','jinjazz一号'
/*
cson1分数:662 vs jinjazz一号分数:338
cson1分数:646 vs jinjazz一号分数:354
cson1分数:638 vs jinjazz一号分数:362
cson1分数:676 vs jinjazz一号分数:324
cson1分数:686 vs jinjazz一号分数:314*/

#19


应该取名:专杀剪刀一号。

#20


关注

#21


关注

#22


关注

#23


学习一下

#24


再帮你顶上去

#25


我说呢,怎么伴水到处发这玩意,原来是转的啊!~

#26


主程序能不能改下,既然有初始化应该有个最后释放的

#27


[img=http://static9.photo.sina.com.cn/orignal/43f130b8441d7aa9806b8][/img]

#28


强悍
可以这样玩

#29


飘过

#30


[img=http://p.blog.csdn.net/images/p_blog_csdn_net/zswangii/%E5%A5%BD%E5%96%9C%E6%AC%A2.gif]图[/img]小剪刀你是我的偶像。。

#31


学习,帮顶

#32


学习 帮顶了

#33


引用 29 楼 huangqing_80 的回复:
飘过

#34


dao!

#35


高雅.

#36


up,关注!!

#37


up,关注!!

#38


飘过
jf

#39


哈哈,好玩,有么高手表演一下

#40


我现在还没有这个能力啊.呵呵.

#41


引用 29 楼 huangqing_80 的回复:
飘过

#42


引用 31 楼 huangqing_80 的回复:
学习,帮顶

#43


引用 11 楼 yun_feiyang_77 的回复:
学习

#44


引用 15 楼 Haiwer 的回复:
Mark 

#45


引用 7 楼 huyouni 的回复:
不错不错

#46


掂脚路过

#47


呵呵

#48


接分学习.呵呵!!牛

#49


牛!

#50


/*------------小熊一号-------*/

--初始化
if(object_id('小熊一号_init') is not null) 
drop procedure 小熊一号_init
go
create procedure 小熊一号_init
as
begin
    declare @empty int
    --这机器人随时开战
end
go

--出拳
if(object_id('小熊一号_come') is not null) 
drop procedure 小熊一号_come
go
create procedure 小熊一号_come(@finger int out,@sum int out)
as
begin
declare @fins table(fingers int)
declare @fin table(finger int)
insert @fins select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 10
insert @fin select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5
    set @sum=(select top 1 fingers from @fins order by newid())
set @finger=(select top 1 finger from @fin where finger between @sum-5 and @sum order by newid())   
end
go
---查看比赛结果
if(object_id('小熊一号_comeout') is not null) 
drop procedure 小熊一号_comeout
go
create procedure 小熊一号_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
    --这机器人不关心比赛结果
    declare @empty int
end
go

#1


本帖最后由 jinjazz 于 2008-04-29 01:07:38 编辑
use tempdb
go

--主控过程:
--作者主页:http://blog.csdn.net/jinjazz
--参数说明:两个参数为两个酒鬼ID
--调用示例: exec game_huaquan 'jinjazz1','jinjazz2'
if(object_id('game_huaquan') is not null) 
drop procedure game_huaquan
go
create procedure game_huaquan (@eastid nvarchar(100),@westid nvarchar(100))
as
begin
--出拳和输出的动态sql语句变量
declare @east_come nvarchar(1000),@west_come nvarchar(1000)
declare @east_comeout nvarchar(1000),@west_comeout nvarchar(1000)
--两酒鬼的出拳和所叫数值定义
declare @east_finger int,@east_sum int,@west_finger int,@west_sum int
--分数定义
declare @east_score int, @west_score int
--结果定义
declare @east_result nvarchar(10) , @west_result nvarchar(10)
--超时控制变量定义
declare @east_time int ,@west_time int,@east_timestart datetime,@west_timestart datetime,
@east_timecount int, @west_timecount int
--循环定义
declare @i int,@j int
declare @break_j int, @break_i int

--初始化定义变量
set @east_timecount=0 set @west_timecount=0
set @east_score=0 set @west_score=0
set @break_j=0 set @break_i=0

set @i=0;set @j=0
     
--初始化两酒鬼
set @east_timestart=getdate()
exec (@eastid+'_init')
set @east_time=datediff(ms,@east_timestart,getdate())

set @west_timestart=getdate()
exec (@westid+'_init')
set @west_time=datediff(ms,@west_timestart,getdate())

--初始化超时判断
if(@east_time>1000 or @west_time>1000)
set @break_i=1

--开始比赛
while(@i<1000 and @break_i=0)
begin
set @break_j=0
set @j=0
while(@j<100 and @break_j=0)
begin
set @east_result='未知' set @west_result='未知'
--东家酒鬼出拳
set @east_come='exec '+@eastid+'_come @east_finger out,@east_sum out'
set @east_timestart=getdate()
exec sp_executesql   
@east_come,   
N'@east_finger int  output,@east_sum int output',
@east_finger=@east_finger output,  @east_sum=@east_sum output
set @east_time=datediff(ms,@east_timestart,getdate())
--西家酒鬼出拳
set @west_come='exec '+@westid+'_come @west_finger out,@west_sum out'
set @west_timestart=getdate()
exec sp_executesql   
@west_come,   
N'@west_finger int  output,@west_sum int output',
@west_finger=@west_finger output,  @west_sum=@west_sum output
set @west_time=datediff(ms,@west_timestart,getdate())
--超时判断
if(@east_time>2000) 
set @east_timecount=999
else
if(@east_time>300) 
set @east_timecount=@east_timecount+1
if(@west_time>2000) 
set @west_timecount=999
else
if(@west_time>300) 
set @west_timecount=@west_timecount+1

if(@east_timecount>=10 or @west_timecount>=10)
begin
set @break_j=1 set @break_i=1
end
--犯规判断
if(@east_finger>5 or @east_finger<0 or @east_sum>10 or @east_sum<0 or 
@east_sum-@east_finger>5 or @east_sum<@east_finger or @east_finger is null or @east_sum is null)
set @east_result='犯规'
if(@west_finger>5 or @west_finger<0 or @west_sum>10 or @west_sum<0 or 
@west_sum-@west_finger>5 or @west_sum<@west_finger or @west_finger is null or @west_sum is null)
set @west_result='犯规'
--结果判断
if(@east_finger+@west_finger=@east_sum)
begin
set @east_result='胜'
end
if(@east_finger+@west_finger=@west_sum)
begin
set @west_result='胜'
end
if(@east_result=@west_result)
begin
set @east_result='平'
set @west_result='平'
end
else
begin
if(@east_result='犯规')set @west_result='胜' 
if(@east_result='胜')set @west_result='负'
if(@west_result='犯规')set @east_result='胜' 
if(@west_result='胜')set @east_result='负'
set @break_j=1
end
if(@east_result='胜') set @east_score=@east_score+1
if(@west_result='胜') set @west_score=@west_score+1

--输出结果

set @east_comeout='exec '+@eastid+
'_comeout @east_finger,@east_sum,@east_result,@west_finger,@west_sum,@west_result'
set @east_timestart=getdate()
exec sp_executesql   
@east_comeout,   
N'@east_finger int ,@east_sum int ,@east_result varchar(10),
@west_finger int,@west_sum int,@west_result  varchar(10)',
@east_finger=@east_finger,  @east_sum=@east_sum ,@east_result=@east_result,
@west_finger=@west_finger,  @west_sum=@west_sum ,@west_result=@west_result
set @east_time=datediff(ms,@east_timestart,getdate())
 
set @west_timestart=getdate()
set @west_comeout='exec '+@westid+
'_comeout @west_finger,@west_sum,@west_result,@east_finger,@east_sum,@east_result'
exec sp_executesql   
@west_comeout,   
N'@west_finger int,@west_sum int,@west_result  varchar(10),
@east_finger int ,@east_sum int ,@east_result varchar(10)',
@east_finger=@east_finger,  @east_sum=@east_sum ,@east_result=@east_result,
@west_finger=@west_finger,  @west_sum=@west_sum ,@west_result=@west_result
set @west_time=datediff(ms,@west_timestart,getdate())

--输出超时判断
if(@east_time>2000) 
set @east_timecount=999
else
if(@east_time>300) 
set @east_timecount=@east_timecount+1
if(@west_time>2000) 
set @west_timecount=999
else
if(@west_time>300) 
set @west_timecount=@west_timecount+1

if(@east_timecount>=10 or @west_timecount>=10)
begin
set @break_j=1 set @break_i=1
end
set @j=@j+1

end
set @i=@i+1
end
--输出最终结果
if (@east_time>1000)
print @eastid+'初始化严重超时'
if (@west_time>1000)
print @westid+'初始化严重超时'
if(@east_timecount=999)
print @eastid+'严重超时'
if(@east_timecount=10)
print @eastid+'超时达到10次'
if(@west_timecount=999)
print @westid+'严重超时'
if(@west_timecount=10)
print @westid+'超时达到10次'
if(@break_i=0)
print @eastid+'分数:'+cast( @east_score as varchar(100))+' vs '+ @westid+'分数:'+cast( @west_score as varchar(100))
end

go

#2


本帖最后由 jinjazz 于 2008-04-29 01:48:04 编辑
/*-----------
玩法很简单,只要仿照下面两个例子:
1、定义一个ID,比如:长江七号
2、完成三个过程:
初始化: 长江七号_init
出拳: 长江七号_come
查看结果: 长江七号_comeout
3、调用主控过程 exec game_huaquan '长江七号','jinjazz2'
4、等待系统结果显示
-----------*/


/*------------酒鬼jinjazz1-------*/

--初始化
if(object_id('jinjazz1_init') is not null) 
drop procedure jinjazz1_init
go
create procedure jinjazz1_init
as
begin
declare @empty int
--这机器人随时开战
end
go

--出拳
if(object_id('jinjazz1_come') is not null) 
drop procedure jinjazz1_come
go
create procedure jinjazz1_come(@finger int out,@sum int out)
as
begin
set @finger=5
set @sum=10;
end
go
---查看比赛结果
if(object_id('jinjazz1_comeout') is not null) 
drop procedure jinjazz1_comeout
go
create procedure jinjazz1_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
declare @empty int
--这机器人不关心比赛结果
end
go




/*------------酒鬼jinjazz2-------*/

--初始化
if(object_id('jinjazz2_init') is not null) 
drop procedure jinjazz2_init
go
create procedure jinjazz2_init
as
begin
declare @empty int
--这机器人随时开战
end
go

--出拳
if(object_id('jinjazz2_come') is not null) 
drop procedure jinjazz2_come
go
create procedure jinjazz2_come(@finger int out,@sum int out)
as
begin
set @sum=abs(checksum(newid()))%11;
if(@sum<5) --别犯规
set @finger=abs(checksum(newid()))%(@sum+1)
else
set @finger=@sum-5+abs(checksum(newid()))%6
end
go
---查看比赛结果
if(object_id('jinjazz2_comeout') is not null) 
drop procedure jinjazz2_comeout
go
create procedure jinjazz2_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
--这机器人不关心比赛结果
declare @empty int
end
go

#3


本帖最后由 jinjazz 于 2008-04-29 01:46:03 编辑
现在第一个擂主是jinjazz一号,欢迎大家来挑战

/*------------酒鬼jinjazz一号-------*/

--初始化
if(object_id('jinjazz一号_init') is not null) 
drop procedure jinjazz一号_init
go
create procedure jinjazz一号_init
as
begin
declare @empty int
--这机器人随时开战
end
go

--出拳
if(object_id('jinjazz一号_come') is not null) 
drop procedure jinjazz一号_come
go
create procedure jinjazz一号_come(@finger int out,@sum int out)
as
begin
set @sum=abs(checksum(newid()))%11;
if(@sum<5) --别犯规
set @finger=abs(checksum(newid()))%(@sum+1)
else
set @finger=@sum-5+abs(checksum(newid()))%6
end
go
---查看比赛结果
if(object_id('jinjazz一号_comeout') is not null) 
drop procedure jinjazz一号_comeout
go
create procedure jinjazz一号_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
--这机器人不关心比赛结果
declare @empty int
end
go

#4


强大

#5


哈哈,介绍的很详细,过几天来打擂

#6


好玩,还可以干这个

#7


不错不错

#8


没想过还有这个用处

#9


支持
加油

#10


jf

#11


学习

#12


接分

#13


先看看,,,

#14


好玩,我也要玩!

#15


Mark

#16


luguo.

#17


--主控过程:
--作者主页:http://blog.csdn.net/jinjazz
--参数说明:两个参数为两个酒鬼ID
--调用示例: exec game_huaquan 'jinjazz1','jinjazz2'
/*-----------
玩法很简单,只要仿照下面两个例子:
1、定义一个ID,比如:长江七号
2、完成三个过程:
        初始化:    长江七号_init
        出拳:        长江七号_come
        查看结果:    长江七号_comeout
3、调用主控过程    exec game_huaquan '长江七号','jinjazz2'
4、等待系统结果显示
-----------*/
if(object_id('cson1_init') is not null) 
drop procedure cson1_init
go
create procedure cson1_init
as
begin
    declare @empty int
    --这机器人随时开战
end
go

--出拳
if(object_id('cson1_come') is not null) 
drop procedure cson1_come
go
create procedure cson1_come(@finger int out,@sum int out)
as
begin
    declare @finger1 int
    set @finger1=abs(checksum(newid()))%6;
    set @finger =abs(checksum(newid()))%6;
    set @sum =@finger1+@finger
end
go
---查看比赛结果
if(object_id('cson1_comeout') is not null) 
drop procedure cson1_comeout
go
create procedure cson1_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
    --这机器人不关心比赛结果
    declare @empty int
--    print rtrim(@selfFinger)+','+rtrim(@seflSum)+','+rtrim(@selfResult)+','+rtrim(@oterFinger)+','+rtrim(@otherSum)+','+rtrim(@otherResult)
end
go

#18


哈哈,胜率100%
exec game_huaquan 'cson1','jinjazz一号'
exec game_huaquan 'cson1','jinjazz一号'
exec game_huaquan 'cson1','jinjazz一号'
exec game_huaquan 'cson1','jinjazz一号'
exec game_huaquan 'cson1','jinjazz一号'
/*
cson1分数:662 vs jinjazz一号分数:338
cson1分数:646 vs jinjazz一号分数:354
cson1分数:638 vs jinjazz一号分数:362
cson1分数:676 vs jinjazz一号分数:324
cson1分数:686 vs jinjazz一号分数:314*/

#19


应该取名:专杀剪刀一号。

#20


关注

#21


关注

#22


关注

#23


学习一下

#24


再帮你顶上去

#25


我说呢,怎么伴水到处发这玩意,原来是转的啊!~

#26


主程序能不能改下,既然有初始化应该有个最后释放的

#27


[img=http://static9.photo.sina.com.cn/orignal/43f130b8441d7aa9806b8][/img]

#28


强悍
可以这样玩

#29


飘过

#30


[img=http://p.blog.csdn.net/images/p_blog_csdn_net/zswangii/%E5%A5%BD%E5%96%9C%E6%AC%A2.gif]图[/img]小剪刀你是我的偶像。。

#31


学习,帮顶

#32


学习 帮顶了

#33


引用 29 楼 huangqing_80 的回复:
飘过

#34


dao!

#35


高雅.

#36


up,关注!!

#37


up,关注!!

#38


飘过
jf

#39


哈哈,好玩,有么高手表演一下

#40


我现在还没有这个能力啊.呵呵.

#41


引用 29 楼 huangqing_80 的回复:
飘过

#42


引用 31 楼 huangqing_80 的回复:
学习,帮顶

#43


引用 11 楼 yun_feiyang_77 的回复:
学习

#44


引用 15 楼 Haiwer 的回复:
Mark 

#45


引用 7 楼 huyouni 的回复:
不错不错

#46


掂脚路过

#47


呵呵

#48


接分学习.呵呵!!牛

#49


牛!

#50


/*------------小熊一号-------*/

--初始化
if(object_id('小熊一号_init') is not null) 
drop procedure 小熊一号_init
go
create procedure 小熊一号_init
as
begin
    declare @empty int
    --这机器人随时开战
end
go

--出拳
if(object_id('小熊一号_come') is not null) 
drop procedure 小熊一号_come
go
create procedure 小熊一号_come(@finger int out,@sum int out)
as
begin
declare @fins table(fingers int)
declare @fin table(finger int)
insert @fins select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5
union all select 6 union all select 7 union all select 8 union all select 9 union all select 10
insert @fin select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5
    set @sum=(select top 1 fingers from @fins order by newid())
set @finger=(select top 1 finger from @fin where finger between @sum-5 and @sum order by newid())   
end
go
---查看比赛结果
if(object_id('小熊一号_comeout') is not null) 
drop procedure 小熊一号_comeout
go
create procedure 小熊一号_comeout(
@selfFinger int,
@seflSum int,
@selfResult varchar(10),
@oterFinger int,
@otherSum int,
@otherResult varchar(10))
as
begin
    --这机器人不关心比赛结果
    declare @empty int
end
go