兰陵笑忘生
★阿宅救援团★C++入门【四】数组

本帖最后由 兰陵笑忘生 于 2013-5-26 14:25 编辑

数组定义:数组是由类型名标识符维数组成的符合数据类型

类型名规定了存放在数组中的元素的类型,而维数则制定数组中包含的元素个数

===这里让我神烦一下←_←大白话地说,数组就是存一堆相同类型的数据,而且数组在申明的时候就已经确定了大小,所以在以后的使用过程中是没有办法增加它的大小的。比如说我定义了一个包含十个元素的int型的数组,那么我在这个数组里只能存储10个数据,,而且只能是int型的。如果我在实际操作中发现我要存储的数据大于10个了,你只能去重新申请一个更大容量的数组。所以这也是数组的缺点呢~

一维数组

数组的定义和初始化

定义:

类型名 数组名[X];

[mw_shl_code=cpp,true]const unsigned buf_size = 512, max_files = 20; //常量 const

int staff_size = 27; //不是常量 只有在运行时才知道他的数值

string file[buf_size]; //ok

double salary[max_files+1];//ok

char characters[5];//ok

int test[staff_size];//错误!是个不知道数值的变量

[/mw_shl_code]

【point:X一定要是常量!】

初始化:

[mw_shl_code=cpp,true]int a[5]={0,1,2}; //a[]={0,1,2,0,0}

string str[5]={"hi","hi"}; //str[]={"hi","hi","","",""};

char cal[] = {'C','+','+'}; //size=3

char cal[] = {'C','+','+',''}; //size=4

char cal[] = "C++"; //size=4因为字符串包含了一个额外的空字符(null)用于结尾~这个比较理论 看看就过吧

char cal[3] = "C++"; //error[/mw_shl_code]

数组操作

数组通过下标访问 从0开始计数

意思说比如我声明了一个int num[5];的数组,他里面是能能存放5个整数的。但是下标是0、1、2、3、4

这时我要取第二个数组的值我就要这么写:int the_secd_num=num[1];

这里再举个栗子~用到了循环~虽然还没带领米娜学循环,但是先看看代码感受一下o(* ̄▽ ̄*)o 【←_←感受!

[mw_shl_code=cpp,true]int num[10];

int i=0;

//********给数组的每一个值初始化为0*********//

while(i<10)//数组下标是从0到9,所以i变为10时无法进入循环,循环终止

{

num=0;

i++;

}

//********打印出数组中每个元素的值*********//

i=0;

while(i<10)

{

cout<<"数组的第"<<i+1<<"个元素是"<<num<<endl;

i++;

}[/mw_shl_code]

二维数组

定义和初始化的栗子:

[mw_shl_code=cpp,true] int ia[3][4]={

{0,1,2,3},

{4,5,6,7},

{8,9,10,11}

};[/mw_shl_code]

第一维,相当于行(row),第二维相当于列(column)

所以上面的栗子就等于申请了一个三行四列数据的数组。

当然这样的下面的定义也是可以的 只不过缺点是不清楚

[mw_shl_code=cpp,true]int ia[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};[/mw_shl_code]

之后还有多维数组之类的~不过现在不需要掌握这么多复杂的呢~大家以后接触到了 再讲不迟o(* ̄▽ ̄*)o

=======================我是每周开始神烦的作业菌=====================
嘛~刚刚循环的代码大家有没有感受地很清晰?

不是很明白的话~再去感受一下o(* ̄▽ ̄*)o 【←_←什么都没讲的你可以滚出了!

嘛~今天的作业和上面的比较像呢~说起来是数组的作业,但主要还是让大家提前接触一下循环~

作业菌就是:

声明一个包含20个元素的数组,赋值为0,1,2,3,4.。。。。。。19

并打印出来~

[fold=升级版~有空的童鞋可以做~不强制要求的呢]声明一个包含26个元素的数组,赋值为所有的小写字母a-z

参考的一个小代码~

char ch='a';

ch++;

cout<<ch<<endl;

大家想想以上的ch输出的是什么也许就会有想法了呢[/fold]

日向枣
拖了這麼久終於完成了唔
展开Biu

拖了這麼久終於完成了唔

其實一開始是醬紫的.....那段綠色代碼還是慢慢看好了

[查看全文]
Moss
感觉好难哦
展开Biu

感觉好难哦!脑子的水分子越来越多了。

[查看全文]
米汤煮成酱
这周事儿比较多
展开Biu

_(:з」∠)_果面 这周事儿比较多...........

[查看全文]
兰陵笑忘生
怎么越来越简略了
展开Biu

foodszhu 发表于 2013-4-8 15:34

支持。。。不过。。怎么越来越简略了

我困(( _ _ ))..zzzZZ

施工中呢~等我有精神了来补~

拜托了楼上召唤的那位o(* ̄▽ ̄*)o

[查看全文]
foodszhu
怎么越来越简略了
展开Biu

支持。。。不过。。怎么越来越简略了

[查看全文]
兰陵笑忘生
你补充吧
展开Biu

@Whisper1166 你补充吧←_←

还有二维数组 多维你看着办吧

循环判断这些逻辑还没讲→_→ {:43_8928:}

[查看全文]
兰陵笑忘生
本帖最后由
展开Biu

本帖最后由 兰陵笑忘生 于 2013-4-10 15:48 编辑

作业楼

上周作业讲解

上一周的作业比较简单~只要是上交的孩子们都写对的呢!

贴一个数字君的代码,因为有运行结果方便大家查看呢~米娜做的都很棒!窝表示很欣慰o(* ̄▽ ̄*)o

【有什么疑惑的地方可以在楼层里提问或者直接私戳QQ】

这次作业下周五之前交上来吧【2013-4-19】~周五晚上讲评

@alineviola @307460466 @kurisu725 @Moss

@米汤煮成酱 @MAY_五月 @马猴烧酒kira★ 泥萌三个这周还没上交~嘛~没关系 慢慢写~不会的话参考下参考答案吧~

[查看全文]
foodszhu
Go与SDL写小游戏(三)----井字游戏

本帖最后由 foodszhu 于 2013-4-2 01:03 编辑

无聊啊无聊啊$38$、

前面两篇:

配置篇

Hello World篇

-----------------------------------------------------------------------------------------------------------------------

这次我们真正尝试一个稍微像游戏的东西--井字游戏。。。就是那种在 3 X 3方格中画O和X,如果三个连成一线就是胜利。。虽然这东西已经证明先手必胜(不败),但是作为最基础的游戏。就来稍微做一下吧

首先准备一个3 X 3的网格。。。大小为600 X 600

好吧。。。。我不会用GIMP。。。。。自己手画就这么丑。。。。求不喷死。。。

再准备一下O和X的图片。。。这次我们把他们放到一起,一个200 X 400 的图片

(如果能自己画的话还是自己画吧。。。我这个太丑了。。泪奔)

这次我们将尝试事件驱动的编程

[mw_shl_code=applescript,true]package main

import (

"github.com/banthar/Go-SDL/sdl"

)

func main() {

var back_ground, ox, screen *sdl.Surface[/mw_shl_code]

包名,引入包名,主函数,界面surface声明

[mw_shl_code=applescript,true] logic_plane := [3][3]int{}

running := true

turn := true[/mw_shl_code]

逻辑板的声明。。一个3X3的数组。。。

Go语言中数组定义方方式 "[n] *本站禁止HTML标签噢* " 有点古怪。长度下标 n 必须是编译期正整数常量 (或常量表达式)。 长

度是类型的组成部分,也就是说 "[10]int" 和 "[20]int" 是完全不同的两种数组类型。数组是值类型,也就是说会拷⻉贝整个数组内存进行行值传递。可用用 slice 或指针代替。(跟C不同哦)

可以用用 new() 创建数组,返回数组指针。var a = new([10]int)

[mw_shl_code=applescript,true] sdl.Init(sdl.INIT_EVERYTHING)

defer sdl.Quit()

screen = sdl.SetVideoMode(600, 600, 32, sdl.SWSURFACE)

back_ground = sdl.Load("back_ground.png")

ox = sdl.Load("ox.png")

defer back_ground.Free()

defer ox.Free()

sdl.WM_SetCaption("井字游戏", "")[/mw_shl_code]

依旧是老套的初始化与图片的读取,释放。窗口标题的设置。。

下面进入核心事件循环

在SDL中,每当有一个事件发生, 它会被置于事件队列中。事件队列为每个发生的事件保存了事件数据。

所以如果你按一下鼠标按钮,再移动一下鼠标,接着再按下键盘上某个按键,事件队列看起来会像这样:

我们将用一个循环反复捕捉事件。。并且读取事件来驱动整个程序的运作

首先,先说Go的循环

for 支持三种形式:

for init; condition; post {}

for condition {}

for {}

第一种就是C语言的for循环,初始化,判断条件,步进值

第二种就类似while循环,当condition = false时退出循环

第三种就是 while(1),无限循环,只能通过break来退出循环(goto也可,不推荐)

当然go还提供range保留字和for搭配产生迭代器的效果。(很类似python,不过没那么好用,而且基本都是提前算好,不是真正意义上的迭代器)

我们利用running变量判断程序是否进行

[mw_shl_code=applescript,true]for running {

event := sdl.PollEvent()

switch e := event.(type) {

//switch a.(type)检查接口a的类型,然后e就相当于转换了接口的类型

case *sdl.QuitEvent:

running = false

return[/mw_shl_code]

sdl.PollEvent函数左右是从消息队列里提取出一个事件,并返回。返回值是sdl.Event,sdl.Event是一个接口。。。

这里接口解释起来比较复杂。。。

所谓接口。。我们简单认为就是满足一定特性的一系列事物,对于Go,就是他一定拥有某些方法,对于一个接口,它实际存储的可能是任何类型,但都必须有某个方法。。这样便实现了多态。。这里因为还没说方法。。就先不多说接口问题,

switch语句用于多路选择,在各个语言中都有涉及,不过Go语言明显吸取了C的教训,switch中case语句可以跟任何类型的常量/变量,而且默认case语句后自带break,也就是不会从一个case语句跑到另一个中,如果真需要这样做,必须显式使用fallthrough来修饰。。。同样有default来进行默认情况的匹配

而我们这里,用一个switch比较特别的用法,swith a.(type)

a.(type)这种用法仅能在switch语句中使用,用来匹配a的类型 结果返回a的类型。

而这里我们由于event是一个接口,所以它返回的一定是它所存储的数据的类型,由于接口存储的必然是指针,所以我们就可以由此判断

sdl.QuitEvent是离开的事件,也就是窗口点x,右键退出等所响应的事件

我们将running = false。意味循环结束

[mw_shl_code=applescript,true] case *sdl.MouseButtonEvent:

if e.Type == sdl.MOUSEBUTTONDOWN {

switch e.Button {

case sdl.BUTTON_RIGHT:

for i := 0; i < 3; i++ {

for j := 0; j < 3; j++ {

logic_plane[j] = 0

}

}

case sdl.BUTTON_LEFT:

i := e.X / 200

j := e.Y / 200

if logic_plane[j] == 0 {

if turn {

turn = !turn

logic_plane[j] = 1

} else {

turn = !turn

logic_plane[j] = 2

}

}

}

}

}[/mw_shl_code]

下面我们匹配鼠标事件,如果鼠标右键单击,则游戏重新开始,

左键单击,则在逻辑板中进行变化。每点一次turn切换一次,意味这两个人交替下子。

最后我们将一下精灵图的概念

当我们需要一系列较小图片来组成整个程序时,我们往往不希望每一个小图片都是一个独立的文件,这样无疑使得读取更加费时,操作更加复杂,所以提出了精灵图的概念,将一个子图集合放入一个单独的图片文件中,并blit你想要使用的部分。

[mw_shl_code=applescript,true] screen.Blit(nil, back_ground, nil)

for i := 0; i < 3; i++ {

for j := 0; j < 3; j++ {

if logic_plane[j] == 1 {

screen.Blit(&sdl.Rect{int16(i*200 + 10), int16(j*200 + 10), 180, 180},

ox, &sdl.Rect{0, 0, 170, 170})

} else if logic_plane[j] == 2 {

screen.Blit(&sdl.Rect{int16(i*200 + 10), int16(j*200 + 10), 180, 180},

ox, &sdl.Rect{0, 200, 170, 170})

}

}

}

screen.Flip()

}

}[/mw_shl_code]

首先我们将背景贴到屏幕上。

我们知道方法Blit中,调用者是目标界面,第二个参数是源界面,那么第一个参数和第三个参数是干什么的呢?

这两个参数是接受一个sdl.Rect结构,第一个参数表示将要贴在目标界面的哪个部分,第三个参数表示取自源界面的哪个部分。这样就完成了精灵图的操作了。

每次只要根据图片选择一定矩形区域内的图片,就可以部分显示了。。

至于其实最后还应该写一下胜利逻辑。。。由于跟SDL就没什么关系了。。。所以也就懒得写了。。。。

效果图

全部源码:

[mw_shl_code=applescript,true]package main

import (

"github.com/banthar/Go-SDL/sdl"

)

func main() {

var back_ground, ox, screen *sdl.Surface

logic_plane := [3][3]int{}

running := true

turn := true

sdl.Init(sdl.INIT_EVERYTHING)

defer sdl.Quit()

screen = sdl.SetVideoMode(600, 600, 32, sdl.SWSURFACE)

back_ground = sdl.Load("back_ground.png")

ox = sdl.Load("ox.png")

defer back_ground.Free()

defer ox.Free()

sdl.WM_SetCaption("井字游戏", "")

for running {

event := sdl.PollEvent()

switch e := event.(type) {

//switch a.(type)检查接口a的类型,然后e就相当于转换了接口的类型

case *sdl.QuitEvent:

running = false

return

case *sdl.MouseButtonEvent:

if e.Type == sdl.MOUSEBUTTONDOWN {

switch e.Button {

case sdl.BUTTON_RIGHT:

for i := 0; i < 3; i++ {

for j := 0; j < 3; j++ {

logic_plane[j] = 0

}

}

case sdl.BUTTON_LEFT:

i := e.X / 200

j := e.Y / 200

if logic_plane[j] == 0 {

if turn {

turn = !turn

logic_plane[j] = 1

} else {

turn = !turn

logic_plane[j] = 2

}

}

}

}

}

screen.Blit(nil, back_ground, nil)

for i := 0; i < 3; i++ {

for j := 0; j < 3; j++ {

if logic_plane[j] == 1 {

screen.Blit(&sdl.Rect{int16(i*200 + 10), int16(j*200 + 10), 180, 180},

ox, &sdl.Rect{0, 0, 170, 170})

} else if logic_plane[j] == 2 {

screen.Blit(&sdl.Rect{int16(i*200 + 10), int16(j*200 + 10), 180, 180},

ox, &sdl.Rect{0, 200, 170, 170})

}

}

}

screen.Flip()

}

}

[/mw_shl_code]

————————————————————————————————————————————————————————————————————————

越写到后面越累啊。。。。最后就懒得说话了。。。。

下次应该就是打砖块了。。。。不过应该就分很多期写了。。。一起说起来太麻烦。。。

反应不好。。不爽求发糖@Whisper1166 @Mr_Alex

foodszhu
晚上回去再看代码
展开Biu

moxiagy 发表于 2013-4-2 16:49

嗯 嗯 晚上回去再看代码

写的非常丑。。。。捂脸。。。求轻喷。。。$61$

[查看全文]
moxiagy
晚上回去再看代码
展开Biu

嗯 嗯 晚上回去再看代码

[查看全文]
foodszhu
是什么啊
展开Biu

langyxxl 发表于 2013-4-2 16:41

这个IDE是什么啊,看上去很不错啊

sublime text。。。。一款非常不错的文本编辑器。。。但不是IDE。。。不过配置配置可以达到IDE的效果的说

虽然说更喜欢vim,但是vim的配色实在比不上这个。。。

[查看全文]
langyxxl
是什么啊
展开Biu

这个IDE是什么啊,看上去很不错啊

[查看全文]
晓晓酱
只是写很简单的东西吧
展开Biu

foodszhu 发表于 2013-4-2 12:04

只是写很简单的东西吧。。。。

我才是尸横遍野啊!

可能是因为我太渣了_(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)_

[查看全文]
jimsshom
虽然我还没用过
展开Biu

支持下go语言,虽然我还没用过:90:

[查看全文]
foodszhu
看到大师后吓到尸横遍野
展开Biu

晓晓酱 发表于 2013-4-2 02:24

_(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)_【看到大师后吓到尸横遍野】 ...

只是写很简单的东西吧。。。。

我才是尸横遍野啊!

[查看全文]
晓晓酱
看到大师后吓到尸横遍野
展开Biu

_(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)__(:3」∠)_【看到大师后吓到尸横遍野】

[查看全文]
查看更多
兰陵笑忘生
★阿宅救援团★C++入门【三】操作符

本帖最后由 兰陵笑忘生 于 2013-5-26 14:26 编辑

本节主要内容:

1.算数操作符

2.自增自减操作符

2.关系操作符和逻辑操作符

一、算数操作符

操作符 功能 用法(设变量 int num;)
+ 一元正号【给数值取正值】 +num;
- 一元符号【给数值取负值】 -num;
* 乘法 num*3;
/ 除法 num/2 【注意:7/2=3 7.0/2.0=3.5】
% 取余【整数除法取余数】 num%3 【若num=8则结果为2】
+ 加法 num+num;
- 减法 num-3;
这个应该比较简单~大家看看就能看懂啦~

以下举个栗子!

[mw_shl_code=cpp,true]int age=16;//定义整形变量age并赋值为16 。人家16岁!【卖萌滚出】

age=age+1; //此时给age加1,

cout<<"next year your age is:"<<age; //那么输出的值就是17啦~[/mw_shl_code]

二、自增自减操作符

如果要简化上个栗子中的算数式~那就用到下述操作符啦~

操作符功能 用法(int age=16;)
++ 自增【使变量值+1】 age++;//等同于age=age+1
-- 自减【使变量值-1】 age--;//等同于age=age-1;

三、关系操作符和逻辑操作符

【注:以下操作符产生的是bool值 bool值只有true和false】

操作符 功能 用法(设变量 int num=1;)
逻辑非 取反 !num 结果为false
< <= 小于 小于等于 num<5 结果为true
> >= 大于 大于等于 num>5 结果为false
== 相等 num==1 结果为true
!= 不等 num!=1 结果为false
&& 逻辑与(两边表达式都为真才为真!有一个为假即为假} (num<5) && (num!=1) 结果为false
|| 逻辑或(两边的表达式有一个为真即为真,两个都为假时才为假) (num<5) || (num!=1) 结果为true
bool值的详细解释:【中文翻译布尔值】

布尔值有两个取值 true false

大于等于1的数都等价于true 而小于等于0的数字都等价于false

再举个栗子~

[mw_shl_code=cpp,true]int num=2;

num--;//自减 然后num=1

if(num)cout<<"positive number";//因为num=1大于0因此此时if语句判断的时候就认为这个语句为true!输出是正数!

num--; //继续自减 num=0

if((!num)==true)cout<<"negative number";

//首先!num将num取反~本来num为0就是false 取反后就是true 再进行相等判断 那么这整一条语句就是true 输出是负数!

[/mw_shl_code]

这一类运算符均有优先级顺序~这个略显急躁【泥垢不会直说】这个作业讲解的时候说→_→

还有禁忌!绝对不能这么用 【8!=7!=6结果是true】

上述判断是绝对绝对错误不可使用的!【要判断三个数不相等要这么写:(8!=7)&&(8!=6)&&(7!=6)】

有疑问先查阅下书本吧~实在不能解决就来问我吧~

=================我是每周都出场的作业君=====================

1。写一个表达式判断一个int型整数是偶数还是集数~ 大家代码填空好了~

[mw_shl_code=applescript,true]if(_______这边缺判断表达式!_________________)

{

cout<<"是奇数";

}

else

{

cout<<"是偶数";

}[/mw_shl_code]

2.有四个整数值a b c d 写一个表达式判断他们是否满足a》b》c》d(a大于b大于c大于d)

兰陵笑忘生
我曾叫没有人
展开Biu

我曾叫没有人 发表于 2013-4-11 16:59

自增自减有个地方容易混淆,就是++i和i++,--i和i--。

++i是i值先自增1后再参与运算。 i=3,j=++i(i+1,j= ...

嗯,这方面忘写了~_~

我电脑开了补充一下>3<谢谢提醒>3<

[查看全文]
我曾叫没有人
自增自减有个地方容易混淆
展开Biu

自增自减有个地方容易混淆,就是++i和i++,--i和i--。

++i是i值先自增1后再参与运算。 i=3,j=++i(i+1,j=4,i=4)

i++是i值先参与运算后再自增1。 i=3,j=i++(j=3,i+1,i=4)

[查看全文]
玖蓝-星
兰陵笑忘生
展开Biu

兰陵笑忘生 发表于 2013-4-9 22:37

自力更生!

@84#我要是会还这么惆怅啊

[查看全文]
兰陵笑忘生
熊孩子啊
展开Biu

玖蓝-星 发表于 2013-4-9 21:50

熊孩子啊,我VB编程要交作业快去找个更大土豪编个给我

{:43_8928:} 自力更生!

[查看全文]
玖蓝-星
熊孩子啊
展开Biu

@95#熊孩子啊,我VB编程要交作业快去找个更大土豪编个给我

[查看全文]
兰陵笑忘生
好吧我现在才想起来
展开Biu

kurisu725 发表于 2013-4-8 21:11

……好吧我现在才想起来。。。最近事情太多忙昏了 于是还能交作业吗QAQ

能的 作业还没讲~

[查看全文]
kurisu725
好吧我现在才
展开Biu

……好吧我现在才想起来。。。最近事情太多忙昏了 于是还能交作业吗QAQ

[查看全文]
米汤煮成酱
米汤煮成酱回复给帖子:9453920
展开Biu

_(:з」∠)_才............发现.........

[查看全文]
查看更多
foodszhu
Go语言+SDL写小游戏----HelloWorld

本帖最后由 foodszhu 于 2013-3-31 11:54 编辑

大家好!看上一篇的回复我就知道golang这种东西还是没有人会看得。。虽然已经料到但还是好伤心。。。所以我就不废话了。。。$61$

一个简单的SDL的HelloWorld

(SDL方面是参照lazy foo的很出名的SDL入门教程,网址:http://www.lazyfoo.net/SDL_tutorials/github上有个中文翻译版但没翻译完全 http://tjumyk.github.com/sdl-tutorial-cn/。。。

希望不算是抄袭。。素材也是用他的了)

对于一个go语言程序,一开头必须是包名,而如果要需要这个包运行,则包名必须是main,之后是所引入的包名,用 import 关键词进行引入,这里我们只需要引入sdl包来进行图片的显示

[mw_shl_code=python,true]package main

import (

"github.com/banthar/Go-SDL/sdl"

)[/mw_shl_code]

在golang 中, 函数用func关键词进行定义,一般是 func [结构名(可选)] 函数名 (参数列表) 返回值列表

这里我们直接定义main作为程序入口,然后定义一下变量。我们声明了两个sdl.Surface类型的指针。在这个程序里,我们要处理两张图像。表面(Surface)"hello"是我们即将加载并显示的图片,表面“screen”是屏幕上可见的窗口。

[mw_shl_code=python,true]func main() {

var hello, screen *sdl.Surface

[/mw_shl_code]

go语言中变量声明方式跟javascript很类似,是用var关键词声明, 结构是 var 变量名列表 (*)变量类型。。与往常大部分C系语言不同的就是他将类型放到最后来进行声明。

[mw_shl_code=python,true] sdl.Init(sdl.INIT_EVERYTHING)

defer sdl.Quit()[/mw_shl_code]

sdl.Init(sdl.INIT_EVERYTHING)初始化sdl的所有子系统,使我们能够使用sdl的图形函数

defer关键词提供一个延迟代码的作用,在其后的语句,会在函数的返回前才运行,这样可以方便我们进行这样的需要退出或者释放内存什么的(虽然golang有垃圾回收的)的工作,以免写到函数末忘记了。sdl.Quit()退出sdl系统

[mw_shl_code=python,true] screen = sdl.SetVideoMode(640, 480, 32, sdl.SWSURFACE)

sdl.WM_SetCaption("你好世界", "") [/mw_shl_code]

调用sdl.SetVideoMode() 是用来建立一个640像素宽、480像素高的32位(位/像素)窗口。其中最后一个参数sdl.SWSURFACE指定将表面存放在软件内存中。

sdl.WM_SetCaption("你好世界", "")设立窗口标题,第一个参数是标题名称,第二个参数是标题图标(windows下可能中文输出会有问题)

[mw_shl_code=python,true] hello = sdl.Load("hello.jpg")

defer hello.Free()[/mw_shl_code]

sdl.Load提供一个函数进行一系列的读取,这里我们拿来读取图像,(在C绑定中应该是SDL_LoadBMP函数,如果要读取其他图片还是得用gfx库的。。但是golang省了!)

同样我们用defer让函数最后释放hello。。。这里函数用法就类似与C++或者python的方法调用,其实golang里是没有类这种概念的。。只有结构体,但是函数又提供了一个让函数绑定在结构体上的方法,让方法调用成为现实

[mw_shl_code=python,true] screen.Blit(nil, hello, nil)

screen.Flip()

sdl.Delay(3000)

}[/mw_shl_code]

整个程序最重要可能就是这句screen.Blit(nil, hello, nil),它将一个表面贴到另一个表面上,三个参数,第一个与第三个是目标表面的裁剪区域与源表面的裁剪区域,第二个参数是源表面,

这里我们就不详细解释。。

screen.Flip()更新窗口

为了不使窗口更新完就消失,我们就使用Delay函数延迟时间,参数以毫米为单位。最后程序结束

完整代码

[mw_shl_code=python,true]package main

import (

"github.com/banthar/Go-SDL/sdl"

)

func main() {

var hello, screen *sdl.Surface

sdl.Init(sdl.INIT_EVERYTHING)

defer sdl.Quit()

screen = sdl.SetVideoMode(640, 480, 32, sdl.SWSURFACE)

sdl.WM_SetCaption("你好世界", "")

hello = sdl.Load("hello.jpg")

defer hello.Free()

screen.Blit(nil, hello, nil)

screen.Flip()

sdl.Delay(3000)

}[/mw_shl_code]

helloworld图片

最终效果图

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

看这种人气程度的话。。。我觉得还是不用讲太详细了吧。。。。反正估计会做很多期。。做到简单的横版过关类游戏就不会做吧。。也不会设计渲染什么的。毕竟骗钱还是需要长久发展的

zw蓝魔
scropioczn
那里学的
展开Biu

啦啦啦,我也是Lazy Foo那里学的SDL,不过是C++上的。目前在搞openGL~

[查看全文]
foodszhu
这些当成学习笔记就好了
展开Biu

moxiagy 发表于 2013-3-31 23:24

没事的,这些当成学习笔记就好了,关于会不会有人看这些并不重要~~

汗。。。学习笔记和教程还是有很多不同的。。。教程还是说的更多一些。。。不过看这个情况。。。

以后多写点C++的?。。。。感觉无论是GTK或者是SDL或者OpenCV/OpenGL感觉版里的人看得不多啊。

[查看全文]
moxiagy
这些当成学习笔记就好了
展开Biu

@@22!! 没事的,这些当成学习笔记就好了,关于会不会有人看这些并不重要~~

[查看全文]
moxiagy
学霸果然厉害
展开Biu

@@25!!w学霸果然厉害,有源码参看吗。。真心想学一下解包

[查看全文]
_Nozomi
看起来略碉堡啊
展开Biu

foodszhu 发表于 2013-3-31 16:31

看起来略碉堡啊。。。。

就是把文件里面的图片按二进制按位取出而已

[查看全文]
foodszhu
我之前也学
展开Biu

Whisper1166 发表于 2013-3-31 15:33

我之前也学Go来着,现在差不多都忘光了……这是之前写的一个小东西:

https://www.gn00.com/t-167282-1 ...

看起来略碉堡啊。。。。

[查看全文]
南南
的话我还是会看一看的
展开Biu

go的话我还是会看一看的

可惜最近没时间仔细研究啊

[查看全文]
查看更多
兰陵笑忘生
★阿宅救援团★C++入门【二】变量的声明和定义

本帖最后由 兰陵笑忘生 于 2013-5-26 14:26 编辑

C++入门【二】

本节内容:

1.解释上周作业留的代码

2.变量的声明和定义

1.上周作业代码:
具体熊孩子们戳本版教程:C++教程(一):快速入门 @轻舟过
【偷懒什么的最愉悦了o(* ̄▽ ̄*)o 】
PS:细心的孩子应该看到了那个帖子上的输入输出语句是这样的
[mw_shl_code=cpp,true]std::cin >> v1 >> v2;

std::cout <<"The sum of "<< v1 <<" and "<< v2 <<" is "<< v1 + v2 << std::endl;[/mw_shl_code]

不过我给的语句是这样的!
[mw_shl_code=cpp,true]in >> v1 >> v2;

cout <<"The sum of "<< v1 <<" and "<< v2 <<" is "<< v1 + v2 << endl;[/mw_shl_code]

没有std:哟~
原因就是我在头文件的引用后加了using namespace std 于是后续就不用添加这么多std:啦~

2.变量的声明和定义
版子里有基本内置变量的说明~不懂的话前去围观一下C++教程(二):基本内置类型 @轻舟过
【又偷懒~打滚~】

先列一下会频繁用到的变量以及他们的说明与声明~
int整形,就是普通意义上的整数int num;
float浮点型float rate;
double浮点型double rate;
bool布尔类型 只能是true或falsebool key;
char单字符类型 只包含一个字符的变量char ch;
string字符串类型 包含很多字符string str;

我不详细讲声明和定义到底是怎么回事~这个往深了讲我也说不清楚

大家只要掌握用法就好~比如大家要声明一个整形 他的值是3;那么就有如下两种方法:

[mw_shl_code=cpp,true]int num;

num=3;[/mw_shl_code]

[mw_shl_code=cpp,true]int num=3;[/mw_shl_code]

至于要选用哪种,随大家的便呢~

这里讲的只是皮毛呢~重要的还是大家自己翻阅书本和查阅资料o(* ̄▽ ̄*)o

熊孩子们务必要在图书馆里借本书看看啊!我这儿只能总结一下最常用的来和你们说一下~

=========================我是华丽丽的作业菌========================

写一个代码~要求用户输入姓名,年龄,性别,喜欢的事务等等信息~然后打印出来~

【代码可参考上一次作业给你们熟悉VC的代码】

【参考的运行结果:】

【作业2013/3/29 下周五之前交起来吧o(* ̄▽ ̄*)o 】

召唤碗里的熊孩子们~ @307460466 @alineviola @MAY_五月 @kurisu725 @Moss @慕容小安 @米汤煮成酱 @马猴烧酒kira★

兰陵笑忘生
趁着周末加油吧
展开Biu

alineviola 发表于 2013-3-29 21:07

4.1QAQ

趁着周末加油吧~

[查看全文]
CC爱发呆
兰陵笑忘生
展开Biu

兰陵笑忘生 发表于 2013-3-29 19:14

没事呢。明天考试是么

4.1QAQ

[查看全文]
兰陵笑忘生
作业交晚了
展开Biu

alineviola 发表于 2013-3-29 18:21

作业交晚了 这个星期撸VB去了QAQ

没事呢。明天考试是么

[查看全文]
CC爱发呆
作业交晚了
展开Biu

作业交晚了 这个星期撸VB去了QAQ

[查看全文]
兰陵笑忘生
是啊所以说工作时候用到大学的东西不过才
展开Biu

Whisper1166 发表于 2013-3-24 00:49

是啊所以说工作时候用到大学的东西不过才3%

做自己喜欢的就行了,我大学学的是嵌入式系统与嵌入式软件开 ...

我们系也有嵌入式的班 不过问他们和我们有什么不同的时候

他们也各种不清楚→_→

大学培养的主要还是自学吧~

_(:з」∠)_说的我又好想去工作了 我太不坚定了

[查看全文]
_Nozomi
兰陵笑忘生
展开Biu

兰陵笑忘生 发表于 2013-3-24 00:42

嗯 也是不错的方向呢~

只是在学校被老师灌输了啥终极目标是优秀架构师的观念→_→

习惯在团队中是被分任 ...

是啊所以说工作时候用到大学的东西不过才3%

做自己喜欢的就行了,我大学学的是嵌入式系统与嵌入式软件开发,工作时候毛线都没用到…

[查看全文]
兰陵笑忘生
不行的吧
展开Biu

Whisper1166 发表于 2013-3-24 00:38

不行的吧,所以要选对最初的一步。

我是感觉做运维也没什么,工资也可以,就向这个发展呗 ...

嗯 也是不错的方向呢~

只是在学校被老师灌输了啥终极目标是优秀架构师的观念→_→

习惯在团队中是被分任务的。。。。这个好路漫漫

而且软件好多方向啊!!!!!超级迷惘

还是默默地再去混个研究生读读/(ㄒoㄒ)/~~

[查看全文]
_Nozomi
兰陵笑忘生
展开Biu

兰陵笑忘生 发表于 2013-3-24 00:35

开发确实很痛苦呢~

虽然大学没做过几个项目 不过确实感受到了/(ㄒoㄒ)/~~

公司绝逼比学校痛苦多了

不行的吧,所以要选对最初的一步。

我是感觉做运维也没什么,工资也可以,就向这个发展呗

[查看全文]
查看更多
兰陵笑忘生
★阿宅救援团★C++入门【一】VC6.0安装与使用

本帖最后由 兰陵笑忘生 于 2013-5-26 14:27 编辑

想学C++语言的亲们可以看过来呢~

【阿宅救援团】开始行动中o( ̄ヘ ̄o* )[握拳!]

说一下我为什么要选择教C++吧~可能大家都有所了解java学习起来更简单 确实如此呢 java从来都不担心指针这种神烦的存在。 它相较C++而言更容易上手 但是,C++毕竟是最底层的语言 你会了C++, java上手就很快;但是你会java并不意味着你会了C++。而且现在的数据结构书主要是C/C++语言描述的,编程最重要的并不是语言,而是数据结构和算法!所以建议大家学一门最基础的语言~那么触类旁通 别的语言上手也很快!

本帖主要讲VC6.0编程工具的安装和使用 预先善其事 必先利其器嘛~

==================我是结束神烦开始教学的分割线=====================

【一】安装VC6.0

VC6.0呢是我们的c++编译器呢~相对于vs2010 2012而言它可能会很不方便,但是他一定是最好的C++编译器!

学C的应该接触过了~那就可以跳过这一步呢~

软件下载及安装说明 ┏ (゜ω゜)=☞

【偷懒无限欢乐中o(* ̄▽ ̄*)o 】

【魂淡淡们最好装英文版啊!中文版翻译极其蛋疼 表示我当年见证过灰常可怕的中文版翻译】

【二】学习基本使用方法

整体过程:

1.创建工程

2.新建cpp文件

3.编写代码

4.编译运行

1.创建工程

点击右上角 file->new 在弹出对话框中选择projects并选中倒数第三个控制台程序 然后确定你的工程名和存放路径o(* ̄▽ ̄*)o 并点击确定

2.新建cpp文件

点击file->new 在弹出对话框中选择files 并选中C++source file 确定文件名

3.编写代码 界面如下~

4.编译运行

文件编写完毕后~点击第一个圈了椭圆的logo 这是compile编译~

如果没有错误~然后点第二个logo 这是build 基本你前面没error 后面也不会出现的!

最后点击惊叹号! 这时就会运行程序~o(* ̄▽ ̄*)o

上图显示的代码运行结果如下:

于是第一个程序就这么跑成功了呢~撒花❀❀❀❀❀❀❀❀❀❀❀❀❀❀

================我是卖萌的作业君=================

【作业一】基础型 这个一定要会!不会后面的没法教!

附上图中的代码~大家把它复制到文件里运行尝试一下呢~

[mw_shl_code=cpp,true]#include *本站禁止HTML标签噢*

using namespace std;

int main()

{

int age; //声明了一个整形变量 名字叫age

cout<<"What's your age?"<<endl; //输出一句话 你的年龄是多少?并换行

cin>>age;//获取用户的输入

cout<<"Your age is:"<<age<<endl; //输出“你的年龄是:”并打印出用户输入的年龄

return 0;//所有的main函数必须要有的一句话 放最后 这个为什么以后会讲解

}[/mw_shl_code]

【作业二】提高型 这个不一定要求做出来~不过孩子们可以摸索一下呢~

于是乎就是提高型作业了→_→ 干巴爹哟孩纸们~【作业什么的真是好讨厌~

这里面有两个错误呢~当然编译之后会显示一大堆错误!无视~只有两处要改~孩子们自己摸索下吧~

【摔!什么都没教就布置作业啊!】对于学过C的孩子一定没有问题的呢!!!!!!

[mw_shl_code=cpp,true]#include *本站禁止HTML标签噢*

using namespace std;

int main()

{

int num1,num2;

cout<<"please enter first number:"<<endl;

cin>>num1;

cout<<"please enter second number:"<<endl;

cin>>num;

cout<<"the sum of "<<num1<<" and "<<num2<<" is: "<<num1+num2<<endl;

return 0;

}[/mw_shl_code]

召唤碗里的熊孩子们~ @307460466 @alineviola @MAY_五月 @kurisu725 @Moss @慕容小安 @米汤煮成酱

作业下周六【2013/3/23 23:00】之前交给我 发运行【作业一】或【作业二】的结果截图到我QQ就好o(* ̄▽ ̄*)o

注:作业一二视大家完成情况吧~但是作业一是一定要交的!

夏初的末冬
查尔德
新手来了
展开Biu

入门啊,新手来了~\(≧▽≦)/~啦啦啦

[查看全文]
右眼
新人直接安装
展开Biu

新人直接安装DEV C++来编程会比较方便

[查看全文]
兰陵笑忘生
明明我们网工可以不修编译原理的
展开Biu

kkkkiki 发表于 2013-5-29 21:08

明明我们网工可以不修编译原理的 悲剧的是系上排课弄错了 不然他求我我也不上的 ...

{:43_8928:}噗。。。。这个错误也能有 瞎了

[查看全文]
kkkkiki
兰陵笑忘生
展开Biu

兰陵笑忘生 发表于 2013-5-29 20:19

编译原理我们是选修23333333333333

尤其是那些纯文字的课真是特别特别无聊都要生茧子了 什么软件需求软 ...

明明我们网工可以不修编译原理的 悲剧的是系上排课弄错了 不然他求我我也不上的

[查看全文]
兰陵笑忘生
我最讨厌的就是我们开的课
展开Biu

kkkkiki 发表于 2013-5-29 20:17

我最讨厌的就是我们开的课 :软件工程 软件文档体系 编译原理(通过率极低) 妈蛋的 坑爹学校 ...

编译原理我们是选修23333333333333

尤其是那些纯文字的课真是特别特别无聊都要生茧子了 什么软件需求软件工程orz

[查看全文]
kkkkiki
兰陵笑忘生
展开Biu

兰陵笑忘生 发表于 2013-5-29 20:15

嗯 软工是软件工程

感觉还是和计算机有差别的吧~

我最讨厌的就是我们开的课 :软件工程 软件文档体系 编译原理(通过率极低) 妈蛋的 坑爹学校

[查看全文]
兰陵笑忘生
软工难道不是软件工程
展开Biu

kkkkiki 发表于 2013-5-29 20:12

软工难道不是软件工程 我是网络工程 合起来都是计算机啦

以后不想走专业 所以学不进去我也认了 ...

嗯 软工是软件工程

感觉还是和计算机有差别的吧~

专业什么的也就是块敲门砖~也不会真的要一直干这行

[查看全文]
查看更多
秋声赋
简单易懂的现代魔法:C#编程教程(一) C#与.Net与VS

本帖最后由 秋声赋 于 2012-7-29 21:52 编辑

C#.NetVS

大家好,我是秋声赋,上次写的XNA的帖子看的人不多,我想是因为受众太少的原因,没基础的看不懂,有基础的对XNA都没啥兴趣,当然也可能是我写的不好.

这次为大家带来一个关于C#的系列基础教程.

从头开始讲起,适合没有任何基础的人,当然也适合那些有一点基础(例如计算机二级)但又对图形编程不清楚的人.

本帖省去了在命令行(类似DOS)那样的编程环境相关的教程,直接从图形界面入手,相信能更加贴近实际的应用程序,也能让你更有兴趣和更容易理解.

希望通过具体的例子,你能够轻松的接受我所说的知识.


在最前面我要告诉大家,学编程是很简单的,并不是想象中的那么复杂.

很多人说编程要数学和英语基础.我的数学并不怎么好,经常不及格,英语的话计算机方面还稍微好一点,但是对于四级能不能通过都不知道.

编程所需要的知识并不是你在课堂上所学的那些,所以我能大胆的告诉你,你的数学和英语好不好,与能不能学好编程一点点关系都没有.

当然你能有优秀的数学和英语能力对于学习编程也是很有帮助的,我现在非常想学好英语,以便于在外国的网站上查找资料.


然后介绍下我对编程的理解.

也许大家发现了本帖的标题是一部动漫的名字<简单易懂的现代魔法>,你们所说的魔法师,搓火球等都是这部动漫里面发展出来的.

我很喜欢这动漫里面的世界观和人设,OP也不错,但是剧情略无语.在这部动漫里面,

现代魔法就是指的编程,通过编程来控制现实世界,以实现魔法所能实现的效果.

我的观点与之类似,编程就是计算机世界里面的魔法,我们就是魔法师(囧..).

想象一下,在这个世界里面,我们能通过咒语(代码)凭空生成物体\能量(对象),

并控制他进行各种各样的行为(函数),修改他各式各样的属性(属性,字段),在我们现实世界看来不就是魔法吗?

在后面的学习过程中,我会经常用这种比喻,以有趣的方式加深你对编程的理解.

同时你也会一点一点地发现原来编程和魔法就是那么相似.

我们是在做一项特别有意思的事情(我们在创造自己的魔法世界!),而不是单调的敲代码.

最后我希望大家能喜欢我的教程,如果有任何的疑问都欢迎提出来,可以在下面回帖,也可以直接联系我(104228916@qq.com).

下面就来开始具体的学习,第一帖我先介绍C#所需要的相关知识和VS2010的安装,并创建出我们的第一个程序.

一、什么是C#

首先介绍的是编程语言,什么是编程语言呢?

就是我们用来写代码的东西咯.

在魔法世界中,释放一个法术一般是需要吟唱咒语的,吟唱的内容必然是遵照一个语言体系的,这个语言体系就是我们所说的编程语言.

它具有一定的语法和组织结构,当然还有我们最讨厌的单词.C#只是其中的一种,另外还有C\C++,Java,VB,VF等等很多.

C#是微软推出的一款基于.Net平台的编程语言,他的语法结构看起来与C\C++相差不大.下面是一小段C#代码:

微软推出C#的目的是和Java竞争,所有和Java有很多的共同点.

首先C#是完全面向对象的,所有程序都包括在一个或者多个对象之中.

并且运行在一个类似Java虚拟机的平台之上,这也是C#能跨平台开发的原因所在(目前只支持微软自己的Windows,XBOX,WindowsPhone等).

从语言的角度上来讲,C#的语法和运行速度完爆Java几条街,C#相对于C\C++开发速度更快,也更加容易入门,

所以本系列帖子都是以C#为编程语言写的.

二、什么是.Net

同样的,我们先介绍一下平台的概念.

平台一套完整的、严密的服务于研制应用软件产品的软件产品及相关文文件

你可以这样理解,在不同的魔法世界中有不同的魔法体系,他们有一定的相同点,也有不同点,

例如魔兽世界中能量是来源于因为永恒之井爆炸而分散在世界各地的奥术能量,通过改变这些奥术能量(束能,能量转化)变成6种不同的能量(奥术,自然,火焰,冰霜,暗影,神圣)给予施法者使用.

型月世界中,能量来自于根源”,由这个产生很多种不同的能量(魔术,魔法).

这种魔法(物理)法则所描述的东西就是魔法体系,也是提供给施法者的魔法释放的一个平台.

在编程中平台也是为我们程序员的程序运行提供了一个可执行的平台.

.Net是一个平台,它是一种面向网络、支持各种用户终端的开发平台环境.

相信在XP年代很多人都被提示安装过.Net运行库,它是.Net程序运行的基础,所有的.Net程序都必须运行在其之上.

目前.Net平台主要覆盖了3个硬件环境,Windows,XBOX,WindowsPhone,所有用.net开发的程序,几乎可以不需要太多的修改就可以实现跨平台的能力.

下面是.Net框架的基本构成:

.Net平台的主要开发语言是C#,当然还有其他的语言,例如VB.Net,C++.Net,J#等等.

如果能掌握C#,其他的语言也很好掌握,因为他们的基本运行原理都是差不多的.

三、什么是VS

这个是最好理解的,也就是我们编程的工具,想象成魔法世界的法杖,水晶,魔法粉尘之类的施法道具就行.

VS是Microsoft Visual Studio的简称,目前最新的稳定版本是MicrosoftVisual Studio 2010.

Microsoft Visual Studio是微软提供的一款非常强大集成开发环境(IDE)软件,

在安装的时候能选择所需要安装的语言.在安装的时候就会顺带安装所需的必要组件,

微软几乎为你做完了所有的环境配置工作.只要安装完成,你就可以立刻开始学习编程.

(这里也是我最讨厌Java的地方,光是环境配置就弄了一下午,最后果断放弃).



实践出真知

为了学好编程,上机实践也是必不可少的,

如果你不实践,不愿意自己在编程工具中去敲代码,不愿意去编译,运行,调试自己的程序,这样是绝对不能学好编程的.

自己动手非常重要,最好还能通过例子的代码,去实现一些自己感兴趣的想法,这样学的话能加深对代码的理解.

所以我希望你们把每一个示例都自己写一遍,并运行,体验自己写出程序的感觉是很棒的.

如果你在运行的过程中有任何的问题,都欢迎在下面回帖,或者直接找我,我会尽自己最大的努力帮你解答.

工欲善其事,必先利其器

既然上机实践是如此重要,我就从我们的编程工具VS2010的安装开始说起.

首先你要从这个地址下载VS2010的ISO光盘镜像文件:

然后用DAEMONTools装载下载的ISO文件.(关于DAEMONTools的安装和使用请自己找Google或者度娘).

运行光盘目录中的autorun.exe文件,就会有安装选项.

WinXP可以用,我记错了...

然后你的C盘(系统盘)剩余空间要够大,虽然能选择安装的位置,但是还是会有2-3G的文件被放在C盘,你选择的位置反而只有1G不到.

接下来就是一直下一步啦.在要你选择安装的组件的时候,全选就是,毕竟以后不可能只用C#吧,要学习C\C++,VB.Net的时候就不用再装了.

然后就是漫长的安装过程.可能会有点长....

最后就是破解啦,教程在下面的网址:

安装就完成了.


千里之行,始于足下

在开始菜单中我们可以找到安装的VS2010.

点击打开,我们可以看到如下的界面.

这就是VisualStudio 2010的主界面.

我们可以看到在中间有新建项目的选项,单击它(当然也能选择[文件]—[新建]—[项目]),就会出现下面的对话框:

在其中找到[VisualC#]–[windows窗体应用程序(WinForm),然后随便取个名字,和选择个位置,

单击确定.这时候系统就会自动帮我们建立一个项目,并自动添加一些文件.

顺便说下,项目就是包含了所有我们所建立的这个程序的相关的资源(代码,图片等等).

然后我们就能得到下面的画面:

也行你的界面和我的排布方式不一样,自己拖成自己喜欢的样子就像.

首先看到左边的解决方案资源管理器:

这里面包含了我们这个工程里面所有包括的资源.当然所有代码也都在这些文件里面啦.

中间这一块大的区域就是我们主要的工作区域,界面的设计和代码的输入都在这里面完成:

在窗口上[右键]—[查看代码](F7)就能查看当前窗口的代码了:

通过上面:

我们回到设计界面中.在右边我们能看到工具栏,

里面包含了我们所能用到的控件,关于控件我们后面详细的讲解,你现在只要知道这是WinForm窗口应用程序最重要的部分就好了.

然后是我们的属性栏:

.

有关控件和窗口的各种属性和事件都可以在这个里面设置.图中选中图标(中间那块)就是属性,闪电状的就是事件。

这里也是我们WinForm窗口应用程序很重要的一部分.

最后是菜单栏:

相信这部分大家都很熟悉,保存啊,新建之类的工作可以在这里完成.

中间有个绿色的小箭头,就是调试(F5)按钮,单击它后,VS就是编译程序,并运行它.

现在我们就可以单击它了,运行下程序试试看!

我们可以得到一个窗口:

很简陋,但是它确实是我们创造出来的不是吗?

而且是凭空创建的,我们没有用任何的资源就创建了它,这难道不就是魔法吗!

为了要这个窗口显得不怎么简陋,我们在设计界面双击窗体(是双击哦,不是查看代码,其中的区别,我后面的帖子会介绍),然后在光标处写下如下代码:

MessageBox.Show("你好!我们自己创造的魔法世界!");

然后再次点击调试按钮(它的快捷键是F5),看看效果:

它弹出了一个对话框,显示了一段文字,当我们点击确定后,我们前面那个窗口就出来了.

很有趣吧,从中你可以看出,图形界面下的编程并不复杂,也比那些单调的命令行形象得多,有趣得多.

上面的例子只是最简单的!以后我们能够创造出更多丰富多彩的世界(程序)!


这就是这一贴的所有编程知识了.

也许只是很简单的一个对话框,但毕竟是我们编程的第一步,

通过后面的学习,最终我们将学会做一些简单的程序来展示我们的学习成果.


最后我再介绍下我的学习经验.

在学习编程的时候,一定要学会通过搜索引擎查找资料,

如果你的英语不错我推荐你用Google,

如果你和我一样对英语很头大,你可以用百度,

在百度找不到的时候再去Google找,使用那些翻译工具帮助你

(注意:翻译工具并不都是准确的!他们经常出错,所以请不要整页整页的使用翻译,而是翻译你不认识的单词,计算机相关的英语通常没什么语法).

然后我再介绍一个找资料最好的地方,MSDN Library,他是微软的知识库,所以相关的知识(例如类的定义,函数的作用)基本上都可以在上面找到

这3个地方是你遇到问题最先去的地方,而不是发帖求助或者寻找他人的帮助.

相信我,自己找到知识永远比别人教你的更容易记住.


本次的作业:

请重新建立一个工程,名字随意,然后弹出2个对话框(不是同时),每个对话框里面显示不同的话.

然后随便在VS2010里面逛一下.了解下VS2010。

第二集地址:https://www.gn00.com/t-37919-1-1.html


欢迎转载,请保留原帖地址:https://www.gn00.com/t-36106-1-1.html

熟悉编程,或者对编程有兴趣的,可加Q群:118213378 ,验证:gn00.com

关键词测试
现在正在用呢
展开Biu

啊哈,C#,现在正在用呢

[查看全文]
赫连吃草
好多图多坏掉了
展开Biu

好多图多坏掉了,楼主要是还是活人能不能补下图图呢

[查看全文]
wugy315
这么古老的语言真的不是很建议学习了
展开Biu

其实C#这么古老的语言真的不是很建议学习了。——致被任务君引导进来的朋友们

[查看全文]
greenkin
图片都加载不出来是什么情况
展开Biu

图片都加载不出来是什么情况?

[查看全文]
拜占庭恋歌
语言的教程贴需要密码呢
展开Biu

=1115=C语言的教程贴需要密码呢~

[查看全文]
云水鸢鱼
赞现代魔法
展开Biu

赞现代魔法

[查看全文]
dnxb
不知什么时候我国才能有一中文汉字为基础的
展开Biu

不知什么时候我国才能有一中文汉字为基础的#3m编程语言,到时候让老外也尝尝我萌#36m的滋味

[查看全文]
endoarato
endoarato回复给帖子:9445413
展开Biu

学习了!!谢谢!!!

[查看全文]
查看更多
ivydom
[开源]vb.net玩蛋のbrainfuck解释器

首发地址:(我的博客)http://me.ivydom.com/archives/brainfuckinter.html

Brainfuck是一种极小化的计算机语言

下面是这八种状态的描述,其中每个状态由一个字符标识:[1]

字符

含义

>

指针加一

<

指针减一

+

指针指向的字节的值加一

-

指针指向的字节的值减一

.

输出指针指向的单元内容(ASCⅡ码)

,

输入内容到指针指向的单元(ASCⅡ码)

[

如果指针指向的单元值为零,向后跳转到对应的]指令的次一指令处

]

如果指针指向的单元值不为零,向前跳转到对应的[指令的次一指令处

(按照更节省时间的简单说法,"]“也可以说成“向后跳转到对应的”["状态”。这两解释是一样的。)

(第三种同价的说法,"["意思是"向前跳转到对应的"]“”,]意思是”向后跳转到对应的[指令的次一指令处,如果指针指向的字节非零。")

Brainfuck程序可以用下面的替换方法翻译成C语言(假设ptr是char*类型):

Brainfuck

C

>

++ptr;

<

--ptr;

+

++*ptr;

-

--*ptr;

.

putchar(*ptr);

,

*ptr =getchar();

[

while (*ptr) {

]

}

当前位置清零

[-] 将当前指针的值归零

之前位置清零

[[-]<] 将当前指针以及之前的指针归零

字符I/O

,. 从键盘读取一个字符并输出到屏幕上。

简单的循环

,[.,] 这是一个连续从键盘读取字符并回显到屏幕上的循环。注意,这里假定0表示输入结束,事实上有些系统并非如此。以-1和”未改变”作为判断依据的程序代码分别是”,+[-.,+]“和”,[.[-],]”。

指针维护

>,[.>,] 通过移动指针保存所有的输入,供后面的程序使用。

加法

[->+<]

把当前位置的值加到后面的单元中(破坏性的加,它导致左边的单元被归零)。

以上摘自百度百科

[mw_shl_code=vbnet,true]ublic Class Form1

Const codes = "+++++[>++++++[>+?<-]<-]"

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

'Dim aa(4) As Byte

'putnum(aa, "222")

execute(codes)

End Sub

Sub putnum(ByVal temp() As Byte, ByVal datas As Byte)

Dim a, tmp As String

Dim i As Integer

a = datas.ToString

For i = 1 To Len(a)

tmp = Mid(CByte(a), i, 1)

Debug.WriteLine(tmp)

temp(i) = Asc(tmp)

Debug.WriteLine(Asc(tmp))

Next

temp(i) = 32

End Sub

Sub execute(ByVal codesignal As String)

Dim length, pcode, pmemory, match, index As Integer

Dim memory(1024) As Byte

Dim test As String

Dim n(1024) As Byte

Dim myEncoding As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8")

Dim syllablecode As Byte() = myEncoding.GetBytes(codesignal)

Debug.WriteLine(syllablecode)

length = syllablecode.Length

pcode = 1

pmemory = 1

TextBox2.Text = ""

TextBox1.Focus()

index = 0

While pcode <= length

If syllablecode(pcode) = 60 Then '<

pmemory -= 1

ElseIf syllablecode(pcode) = 62 Then '>

pmemory += 1

ElseIf syllablecode(pcode) = 43 Then '+

memory(pmemory) += 1

ElseIf syllablecode(pcode) = 45 Then '-

memory(pmemory) -= 1

ElseIf syllablecode(pcode) = 44 Then ',

test = InputBox("", , "0")

memory(pmemory) = Asc(test)

ElseIf syllablecode(pcode) = 46 Then ',

n(index) = memory(pmemory)

TextBox2.Text = n.ToString

ElseIf syllablecode(pcode) = 91 Then '[

match = 1

If memory(pmemory) = 0 Then

While pcode <= length

pcode += 1

If syllablecode(pcode) = 93 Then

match -= 1

If (match = 0) Then

Exit While

End If

ElseIf syllablecode(pcode) = 91 Then

match += 1

End If

End While

End If

ElseIf syllablecode(pcode) = 93 Then ']

match = 1

If memory(pmemory) <> 0 Then

While pcode > length

pcode -= 1

If syllablecode(pcode) = 91 Then

match -= 1

If (match = 0) Then

Exit While

End If

ElseIf syllablecode(pcode) = 93 Then

match += 1

End If

End While

End If

ElseIf syllablecode(pcode) = 63 Then '?

putnum(n, memory(pmemory))

TextBox2.Text = n.ToString

Else

MsgBox("代码有误!")

Exit While

End If

index += 1

pcode += 1

End While

End Sub

End Class[/mw_shl_code]

moxiagy
虽然不明白
展开Biu

虽然不明白,但觉很厉害。。

[查看全文]
_Nozomi
之前看过这个语言
展开Biu

之前看过这个语言,挺无聊的其实

[查看全文]
wis
这语言貌似很碉堡啊
展开Biu

这语言貌似很碉堡啊,名字看着就霸气,帮顶

[查看全文]