正版游戏参见: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
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
/*-----------
玩法很简单,只要仿照下面两个例子:
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一号-------*/
--初始化
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
#34
dao!
#35
高雅.
#36
up,关注!!
#37
up,关注!!
#38
飘过
jf
jf
#39
哈哈,好玩,有么高手表演一下
#40
我现在还没有这个能力啊.呵呵.
#41
#42
#43
#44
#45
#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
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
/*-----------
玩法很简单,只要仿照下面两个例子:
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一号-------*/
--初始化
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
#34
dao!
#35
高雅.
#36
up,关注!!
#37
up,关注!!
#38
飘过
jf
jf
#39
哈哈,好玩,有么高手表演一下
#40
我现在还没有这个能力啊.呵呵.
#41
#42
#43
#44
#45
#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