帐前卒专栏

code, software architect, articles and novels.
代码,软件架构,博客和小说

1.让程序猜你心中的数字。现在有1-100个数,你心中想一个数字。计算机猜一个数字,如果大了,你就输入B,如果小了,你就输入L,如果相等就输入E,然后计算机
将正确的数打印出来,并结束程序。这个过程一直到计算机猜中你心中的数为止。如果你中途作弊,你给错了B,或L,计算机最终会发现这个错误,输出"cheat",结束
程序。

2.for循环到底是怎么执行的呢?能用你的程序证明for的执行步骤吗?

3.现在有100个人进行某项比赛。每次两人比赛,胜者可晋级下一轮。败者不再比赛。下一轮再两两角逐。直到第一名产生为止。问如果想选出真正的第二名,那么总共要进
行多少次比赛?

1.如何将54张扑克以 最快速度 排好序。并用程序实现。

DFGH四个字母发别代表红桃,黑桃,方片,梅花四色。大王为WW,小王为II

例如:红桃K为 DK,红桃2为 D2。。。。

随机产生

最后的顺序为

DA D2 …FA F2…GA G2…HA H2…II WW

如果程序不能实现,写出你的想法。

2.有一个乱序的字符串类似于“a2d.2,3,2b”

现在编写一段程序将所有字母放在一起,数字一起,标点一起。(原来的顺序不能被改变)

变为adb2232.,(标点为英文标点)

ps.另外组长发给我一篇自己的心得体会。

各组选好新的组长,然后对这个任务做拆分,将每个人的任务计划发给我。

以上任务相对比较简短。希望集中两天的时间搞定。

起初我的想法是:

编程兴趣小组的目的在于成员能在编程组中能学到一点点编程技巧,积累一点点编程经验。增加自己对编码的兴趣。

(在给你们的第一封信里)

现在我的想法是:

大一大二利用资源,提升自己的能力。大三大四靠自己的能力提供资源为学弟学妹使用。当然这只是大学4年。以后会发生什么,我还没有想过。

这样大家不仅能学到编程的东西,也能学到一些soft skills.我希望大家把眼界打开,不仅仅只停留在编程方面。(
但是编程是本专业最基础的,所以一定要学好。 )

另外我想听听大家的想法。请不要告诉我:自己没有任何想法。

ps:

前一段时间,大家都在忙新生的事情。现在,请大家把精力集中到学习上来。在这个组里,不仅可以讨论编程,还可以谈谈最近的学习和作业等事项。因为我觉得群里比较沉闷。
(估计有作业要问也得不到解答,或者学习较忙就会上自习而不是上qq)最近李伟健会给大家培训,请珍惜资源。

你们的经验、教训、所得、所失、想法、建议、总结,请发给我。如果是知识技能,比如某某函数如何使用,某某代码如何写,请群发。如果你们感到自己的想法,写的东西,提
的问题很愚蠢,请 只 发给我。

总之,我希望从现在开始大家活跃起来。ok?再不活跃,感觉就不像一个组织了

先建一个JS文件命名为Ajax.js



function CreateXMLHttpRequest()//这里是构造XMLHttpRequest对象的方法
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) … {

var xmlHttpRequest = null ;//这里是大家都常用的IE,firefox中取得XMLHttpRequest对象的方法

try
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {


xmlHttpRequest = new XMLHttpRequest();
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }

catch (e)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

try
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

xmlHttpRequest = new ActiveXObject( " Msxml2.XMLHTTP " );
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }

catch (e)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

xmlHttp = new ActiveXObject( " Microsoft.XMLHTTP " );

![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }


return xmlHttpRequest;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kEnd.gif) }


function AjaxSubmit(url,data,changeFunction)//url指定跳转页,data是要post的数据。changeFu
nction类似于函数指针
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) … {

var xmlHttpResquest = CreateXMLHttpRequest();

xmlHttpResquest.open( " post " ,url, true );

xmlHttpResquest.setRequestHeader( " content-length " ,data.length);

xmlHttpResquest.setRequestHeader( " Content-Type " , " application/x
-www-form-urlencoded " );

xmlHttpResquest.send(data);


xmlHttpResquest.onreadystatechange = function ()
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

if (xmlHttpResquest.readyState == 4 )
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

try
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

if (xmlHttpResquest.status == 200 )
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

alert(xmlHttpResquest.responseText);

changeFunction(xmlHttpResquest.responseText);//这里可以调用想要的函数
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }

catch (e)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

alert( " over " );
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }

![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kEnd.gif) }

比如我有一个页面叫Start.html或者Start.aspx

<
head >
<
title > Untitled Page </ title >
<
script type = " text/javascript " src = " Ajax.js " ></ script >
</
head >
<
body >
<
script language = " javascript " type = " text/javascript " >

AjaxSubmit( " Ajax.aspx " , " nodesInfoTxt=hh " ,InitForAjax);
//
Ajax.aspx是接受数据的页面,InitForAjax是本页面接受到回发数据后要执行的函数。其他的为数据。

function InitForAjax(str)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) … {

alert(str);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kEnd.gif) }
</
script >
</
body >

一般.net生成的aspx页面是这样写的

![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) <% … @ Page Language = " C# " AutoEventWireup =
" true " CodeFile = " Ajax.aspx.cs " Inherits = " Ajax " %>

<!
DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd” >

<
html xmlns =“http://www.w3.org/1999/xhtml” >
<
head runat =“server” >

</
head >
<
body >
<
form id =“form1” runat =“server” >
<
div >

</
div >
</
form >
</
body >


</
html >

下面为了回传数据仅仅是数据而不是连同整个页面一起发送过来。

在Ajax.aspx页面这样这样写(这一句就足够了)

<%
@ Page Language = " C# " AutoEventWireup = " true " CodeFile = "
Ajax.aspx.cs " Inherits = " Ajax " %>

然后在它的后置类也就是Ajax.aspx.cs中这样写:

//
前面省略一些代码生成的东西

protected void Page_Load( object sender, EventArgs e)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) … {

if (Request.Form[ " nodesInfoTxt " ] != null )

string nodes = Request.Form[ " nodesInfoTxt " ].ToString();

Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.ContentType = “text/xml”;
Response.write(“bye”);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kEnd.gif) }

你在本函数结束处设一个断点,是否nodes就已经被赋值了呢?然后继续执行你的页面就会跳出一个bye的提示框。这就是Ajax异步传输。

在一个*.css文件中这样写

.DivClass/注意这个./
{
font-family:Arial;
font-size:14pt;
font-weight:bold;
color:#0000cc;
text-align:center;
top:auto;

left:auto; position:absolute;
filter:alpha(opacity=70);
z-index:50;

}

在HTML页面中在 标签之间使用这里的MyStyle.css是你的css文件的相对路径+文件名。因为我的css文件和HTML文件放在一起了,所以只有MyStyle.css.

如果想使用它

在class属性后加上DivClass即可。这里要记住display:none是把这个div隐藏,之所以这样写是因为
css中如果定义display:none,在javascript中调用display=""就没有任何效果,所以就只好写在外面了。

css的一个特性是后定义的东西会覆盖前面重复的东西。所以在css文件中定义一个大概,在style属性中你还可以制定自己的style.

输出流(cout)基本操作
1、使用流插入运算符(<<)
#include<iostream.h>
void main()
{
char c[]=“Good morning”;
cout<<c<<endl;
}
运行结果:
Good morning
Press any key to continue
2、使用成员函数
// ostream &put(char);
// 输出一个字符,可连续使用
#include<iostream.h>
void main()
{
cout.put(‘A’).put(‘/n’);
}
运行结果:
A
Press any key to continue
// ostream &write(const char*,int);
// 输出若干个字符
#include<iostream.h>
void main()
{
char c[]=“Good morning”;
cout.write(c,4)<<endl;
}
运行结果:
Good
Press any key to continue
输入流(cin)基本操作
1、使用提取运算符(>>)
//输入用空格、制表符、回车分隔
#include<iostream.h>
void main()
{
int i,j; char c;
cin>>i>>c>>j;
cout<<i<<“[”<<c<<“]”<<j<<endl;
}
运行结果:
123 456
123[4]56
Press any key to continue
2、使用成员函数
// int get();
// 读到结束标记返回EOF(-1)
#include<iostream.h>
void main()
{
while(true)
{
cout<<cin.get()<<‘//’;
if(cin.eof())break;
}
}
运行结果:
12 34  5
49/50/32/51/52/9/53/10/^Z
-1/Press any key to continue
// istream &get(char&);
// 读到结束标记返回NULL指针
#include<iostream.h>
void main()
{
char c;
while(true)
{
cout<<cin.get©<<endl;
if(cin.eof())break;
}
}
运行结果:
12
0x004300EC
0x004300EC
0x004300EC
^Z
0x00000000
Press any key to continue
//istream &get(char*,int n,char delimit=‘/n’);
//get不从流中取出结束符,默认结束符是回车
#include<iostream.h>
void main()
{
char s1[10],s2[10],s3[10];
cin.get(s1,10);
cin.get(s2,10);
cin.get(s3,10);
cout<<“---------------------/n”;
cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl;
}
运行结果:
1234567890ABCDEF
---------------------
123456789
0ABCDEF

Press any key to continue
//istream &getline(char*,int n,char delimit=‘/n’);
//getline将从流中取出结束符,默认结束符是回车
#include<iostream.h>
void main()
{
char s1[10],s2[10],s3[10];
cin.getline(s1,10);
cin.getline(s2,10);
cin.getline(s3,10);
cout<<“---------------------/n”;
cout<<s1<<endl;
cout<<s2<<endl;
cout<<s3<<endl;
}
1234567890ABCDEF
Bye bye
---------------------
123456789
0ABCDEF
Bye bye
Press any key to continue
//isrream &read(char *,int);
#include<iostream.h>
void main()
{
char c[10];
cin.read(c,10);
cout.write(c,cin.gcount())<<endl;
}
运行结果:
1234567890ABCDEF
1234567890
Press any key to continue

2、I/O格式控制
ios类中有一些格式控制标志位,可通过公有函数来改变这些标志位
long  flags() ; //返回标志字的值
long  flags(long); //设置标志字的值
long  setf(long); //设置标志位
long  setf(long,long); //设置对齐、数制、浮点标志位
long  unsetf(long); //清除标志位
int   width();
int   width(int); //无保持性,对紧随其后输出的数据有效
char  fill();
char  fill(chac); //填充字符
int   precision();
int   precision(int); //设置精度

设置标志位时,可使用ios类定义的枚举常量:
enum { skipws   = 0x0001,
left    = 0x0002,  // adjustfield
right   = 0x0004,
internal  = 0x0008,
dec    = 0x0010,  // basefield
oct    = 0x0020,
hex    = 0x0040,
showbase  = 0x0080,
showpoint = 0x0100,
uppercase = 0x0200,
showpos  = 0x0400,
scientific = 0x0800,  // floatfield
fixed   = 0x1000,
unitbuf  = 0x2000,
stdio   = 0x4000
};

用成员函数控制:
#include<stdio.h>
#include<iostream.h>
void main()
{
int i=234;
printf(“%08X/n”,i);
cout.setf(ios::hex,ios::basefield);
cout.setf(ios::uppercase);
cout.width(8);
cout.fill(‘0’);
cout<<i<<endl;
cout.setf(ios::dec,ios::basefield);
cout<<i<<endl;
}
运行结果:
000000EA
000000EA
234
Press any key to continue

用流操纵算子控制格式
算子可直接作为I/O输出表达式的一项,算子分为无参算子及有参算子
算子分为无参算子 iostream.h
dec //十进制
oct //八进制
hex //16进制
endl //换行
flush //立即输出
有参算子 iomanip.h
resetiosflags(long) //清除标志位
setfill(int) //设置填充字符
setiosflags(long) //设置标志位
setprecision(int) //设置精度
setw(int) //设置宽度
//用流操纵算子控制格式
#include<iostream.h>
#include<iomanip.h>
void main()
{
int i=234;
cout<<hex<<setfill(‘0’)<<setw(8)<<setiosflags(ios::uppercase)<<i<<endl;
cout<<i<<endl;
cout<<dec<<i<<endl;
cout<<setw(8)<<i<<endl;
}
运行结果:
000000EA
EA
234
00000234
Press any key to continue
显示浮点数
//没指定是定点(fixed)还是科学(scientific)时,默认输出6位有效数字
//指定后,精度是指小数点后的有效位数
#include<iomanip.h>
#include<stdio.h>
#include<iostream.h>
void main()
{
double d=123.4567890123456789123456789;
cout<<d<<endl; //默认6位有效数字
cout<<setprecision(4)<<d<<endl; //保留小数点后3位
cout<<setiosflags(ios::fixed)<<d<<endl; //科学记数法
cout<<setprecision(20)<<d<<endl; //能显示20位吗?
cout<<resetiosflags(ios::fixed); //取消定点显示
cout<<setiosflags(ios::scientific); //科学记数法
cout<<setprecision(4)<<d<<endl; //保留小数点后2位
}
运行结果:
123.457
123.5
123.4568
123.456789012345680
1.2346e+002
Press any key to continue

最近熟悉了一下javascript,发现的确很强大。但是也很诡异。

javascript的下标竟然从1开始。不过还好我可以接受。但有时它又从0开始。疯了!

用过javascript的人都知道它的数组下标是可以从1开始。但是它有时也从0开始,看下面的代码


var strr = " 1,2,3,4;5,6,7,8; "


function strSplit(str)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) … {

var ss = str.split( ’ ; ’ );

for (var i in ss)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {


var sss = ss[i].split( ’ , ’ );

if (sss != “” )
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

for (var j = 0 ; j < sss.length; j ++ ) // 注意这里是从0开始的
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

alert(sss[j]);
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kEnd.gif) }


strSplit(strr);

如果从1下标开始,那就开始只打印2。

所以说javascript真好,可以充分锻炼自己的找bug与排除bug的能力。

所以以后大家数组定一定的时候一定要从0下标开始。

javascript的For…in可以蔽掉所有的undefine对象。嗯,这点很好。但是它可能并不按照数组的已有顺序!

下面是一个把元素插入到数组中代码


function insert(array,i,value)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) … {

var index = i;

for (;index <= array.length;index ++ )
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {

if (array[index] == null )
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {//这里是找到一个空位置

break ;
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }


for ( var j = index; j > i;j -- )
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicato
rs/ContractedSubBlock.gif) … {//这里把现有数组的元素向后移

array[j] = array[j - 1 ];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedSubB
lockEnd.gif) }

array[i] = value;

![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kEnd.gif) }


var o = new Array;
o[
1 ] = 1 ;
o[
3 ] = 2 ;

insert(o, 1 , 3 );//在1的位置插入3

var str = “” ;

for ( var x in o)
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) … {

str += o[x];
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kEnd.gif) }

str += " ! "

for ( var x = 1 ; x < o.length; x ++ )
![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kStart.gif) ![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/
ContractedBlock.gif) … {

if (o[x] != null )

str += o[x]

![](http://images.csdn.net/syntaxhighlighting/OutliningIndicators/ExpandedBloc
kEnd.gif) }

alert(str);//打印结果是 321!312

我是解释不通javascript是怎么遍历的。但的确不是按照顺序遍历的

Geoff Howland(会员王老道译)
是什么使一个游戏让人沉溺于其中?为了使人上瘾,游戏得有一个使人能一直玩下去的动力。其中的一些可以是:为了打爆游戏、为了与他人对抗、对游戏的操纵和界面的精通、
在游戏中探险并取得一个高分或类似的什么。
(一)为了打爆游戏
打爆游戏通常是基于想看到游戏的结局或只是为了完成游戏。如果只是为了完成游戏,那么这个过程就可看作相当于是一次挑战。玩一个特别难的游戏可能会让人有一种自豪感从
而一直把它打爆。但这并不总是能得到最好的结局,因为尽管有些人接受了挑战并取得胜利,而更多的人可能因为它太难而放弃了。人们总喜欢赢,如果你的游戏对他们有一定的
挑战性而最终又让他们赢了,就可能使玩家更高兴。这就是设计时在考虑你所面对的对象时必须做的一个选择。至于玩家打爆游戏只是为看到它的如何结束的这种情况,游戏得有
一个推动它发展的故事情节。即使只是一个简单的情节比如《超级玛丽欧兄弟》(Super
Mario Brothers)
——那也有一个结局。许多玩家都想知道在他们打穿了游戏并最终救出了公主后会发生什么。一旦他们发现了结局而且游戏从他们已经完成的故事的最低等级重新开始,那么那儿
就是玩家停止玩下去的地方。
(二)对抗的动力
能与其他人对抗是游戏吸引人的一个重要因素,而且它能使一个游戏经久不衰。对抗性是一个游戏的基石,它允许人们能在游戏规则的监督下以相同的等级交互作用而且是真正地
掌握在游戏者而不是开发者的手中。玩家可以自己制造陷阱并互相引诱,通常这超过了游戏开发者的思路。如果你设计的游戏有可变通的规则,那么你可以允许玩家创造你所没有
想到的玩的风格、动作和策略。
(三)为了精通游戏
对游戏的控制的精通也是一个极重要的因素,赛车模拟游戏就特别能说明这点,它们的主要目的就是模拟车辆的操纵。通常玩家会重复地玩此游戏来使他们的技术精益求精。
能使他们这样做就需要创建具体的控制级别。例如,在一个驾驶游戏中,一条直道上可以很容易地跑完一次,但要想最有效地完成它你就应能够在轮胎失去牵引力的时候感觉出道
路和它的弹性。在你对玩家的反馈信息中玩家可以学到你的游戏的控制。一个声音表示了轮胎即将失去牵引力,当玩家在跑完全程的过程中,引擎的不同状态就有不用的声音。能
使玩家了解游戏正在如何运作的任何东西——例如一幅地图都是为了让他们有一个好的界面吸引他们,使他们有理由去试图精通这个游戏。如果玩家得不到足够的反馈信息或界面
太黑或太白,他将没有好的精通游戏的途径;如果一个初玩者和一个高手做到某一点的机会大致是相同的,那就没有理由去成为一个高手。
(四)探险的诱惑力
探险的诱惑力从电脑游戏一开始就有了。事实上一些最初的游戏就只是关于探险的。游戏《冒险》(Adventure)是一个文字游戏,玩家可以在区域中游荡并搜集四周的
物品,同时通过组合物品解答一些谜题可以打开更多的区域去探险。更近一些的游戏Myst
也以此作为基础,此游戏卖出了超过一百万份的拷贝。Myst
如此受欢迎说明人们对感兴趣的地方的探险有一种强烈的欲望。许多游戏实现了这点。游戏如
Zork 和 Infocom
文字冒险系列也是基于这一前提而且明确了这是一种类型的游戏。秘密关卡也成为许多游戏的要点,从《超级玛丽欧兄弟》(Super
Mario Brothers)到《最终幻想7》( Final Fantasy 7)游戏吸引力的一个重要方面就是找出秘密关卡。我曾经听Shigeru
Miyamoto (任天堂设计组成员,设计了 Super Mario Brothers, Zelda, Metroid, et
al)说 40%的电视游戏的关卡应该隐藏起来,看起来他把这一点做得很好。
(五)为拿到高分
为了得到高分的动力虽不如前两者更吸引人,但它也足够重要,占有它的一席之地。通常某些人试图在电脑游戏中拿到一个高分或类似的什么,他也在和别人得到的分数作比较或
试图精通游戏。许多人玩游戏就是为了得到一个超过别人的高分。我相信这种在弹球游戏时代起源的游戏动力直到现在的Intnet时代仍以一种较高级的方式存在。你可以看
到此类游戏仍极受欢迎并衍生出不少子类。
另一种类型的热衷于得高分针对于赢得游戏。在《超级玛丽欧兄弟》中在你赢了之后你仍可以增加难度再玩。在一段时期内把它玩通多次或玩通一次两次而不会死成为一些人衡量
自豪程度的标准。多快就能看到
Legend of Zelda
也是挺吸引人的方式。这些类型的上瘾的表现其实是与别人或自身的竞赛并最终成为对游戏的精通。
构造一种方法,让你的游戏的玩家即使在打赢了游戏后仍能继续玩下去,通过增加难度给他们更多的激励,因此,让游戏更富于挑战性是另一种能使你的游戏引人入胜的方法。

C#代码与javaScript函数的相互调用

问:
1.如何在JavaScript访问C#函数?
2.如何在JavaScript访问C#变量?
3.如何在C#中访问JavaScript的已有变量?
4.如何在C#中访问JavaScript函数?

问题1答案如下:
javaScript函数中执行C#代码中的函数:
方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;
2、在前台写一个js函数,内容为document.getElementById(“btn1”).click();
3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数;

方法二:1、函数声明为public
后台代码(把public改成protected也可以)
public string ss()
{
return(“a”);
}
2、在html里用<%=fucntion()%>可以调用
前台脚本

方法三:1、

方法四:

〈!--用来存储你要调用的函数 --〉

在.CS里有:
public Page_OnLoad()
{
if (!Page.IsPost())
{
string strFunName=Request.Form[“FunName”]!=null?Request.Form[“FunName”]:“”;
//根据传回来的值决定调用哪个函数
switch(strFunName)
{
case “enter()”:
enter() ; //调用该函数
break;
case “其他”:
//调用其他函数
break;
default:
//调用默认函数
break;
}
}
}

public void enter()
{
//……比如计算某值
}

问题2.如何在JavaScript访问C#变量?
答案如下:
方法一:1、通过页面上隐藏域访问
方法二:1、如后台定义了PUBLIC STRING N;前台js中引用该变量的格式为’<%=n%>'或"+<%=n%>+"
方法三:1、或者你可以在服务器端变量赋值后在页面注册一段脚本

tmp是后台变量,然后js中可以直接访问temp获得值。

3.如何在C#中访问JavaScript的已有变量?

答案如下:

方法一:1、前台使用静态文本控件隐藏域,将js变量值写入其中;
2、后台用request[“id”]来获取值;

方法二:可以用cookie或session

4.如何在C#中访问JavaScript函数?
答案如下:
c#代码中执行javaScript函数:
方法一:1、 Page.RegisterStartupScript(“ggg”,“”);
方法二:使用Literal类,然后
private void Button2_Click(object sender, System.EventArgs e)
{
string str;
str=“”;
//Literal1.Visible=true;
Literal1.Text=str;

0%