VB.net和ai VBnet

五子棋游戏程序设计(VB)

五子棋的AI构想 有句话叫“当局者迷,旁观者清。”,但这句话在由AI所控制的计算机玩家上是不成立的,因为计算机必须知道有那些获胜方式,并计算出每下一步棋到棋盘上任一格子的获胜几率,也就是说,一个完整的五子棋的AI构想必须:

创新互联于2013年创立,是专业互联网技术服务公司,拥有项目成都网站制作、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元溪湖做网站,已为上家服务,为溪湖各地企业和个人服务,联系电话:028-86922220

 

1、能够知道所有的获胜组合; 2、建立和使用获胜表; 3、设定获胜的分数; 4、使电脑具有攻击和防守的能力; 一、求五子棋的获胜组合 在一场五子棋的游戏中,计算机必须要知道有那些的获胜组合,因此我们必须求得获胜组合的总数。我们假定当前的棋盘为10*10。 (1)计算水平方向的获胜组合数,每一列的获胜组合是:6,共10列,所以水平方向的获胜组合数为:6*10=60 (2)计算垂直方向的获胜组合总数,每一行的获胜组合是:6,共10行,则垂直方向的获胜组合数为:6*10=60 (3)计算正对角线方向的获胜组合总数,正对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36 (4)计算反对角线方向的获胜组合总数,反对角线上的获胜组合总数为6+(5+4+3+2+1)*2=36 ,这样所有的获胜组合数为:60+60+36+36=192 二、建立和使用获胜表 我们已经计算出了一个10*10的五子棋盘会有192种获胜方式,这样我们可以利用数组建立获胜表,获胜表的主要作用是:1,判断当前的获胜方式是否有效;2,判断当前的获胜方式中到底有多少子落入该获胜组合中。详细的使用您将在后面的程序中可以看出。 三,分数的设定 在游戏中为了让计算机能够决定下一步最佳的走法,必须先计算出计算机下到棋盘上任一空格的分数,而其中最高分数便是计算机下一步的最佳走法。 原理:我们判定当前讨论的空格与当前讨论的点有几种获胜的方式,有几种该空格就加几分。这种原理初听起来似乎是无法入手,没关系,当您了解我们后面的程序后您就会明白这种决策原理了。 这种决策有一些缺陷,因为如果只根据这个模型设计,就有可能出现电脑或玩家有三个子连成一线的时候,计算机却判断不出,它认为其他某些空格是当前的获胜的最佳位置而不去攻击或防守。没关系我们完全可以通过一个加强算法来改变当前的分值情况,也就是说当电脑或玩家有三个子或四个子连成一线时,我们通过加强算法将当前与三个子或四个子有关的空格的分值提高,从而可以弥补这一缺憾。 四、攻击与防守 以上的方式,事实上计算机只是计算出了最佳的攻击位置,为了防守我们还应计算当前玩家的最佳的攻击位置。这样有什么用呢?道理很简单,如果玩家最佳攻击位置的分数大于计算机最佳攻击位置上的分数,那么计算机就将下一步的棋子摆在玩家的最佳攻击位上以阻止玩家的进攻,否则计算机便将棋子下在自己的最佳攻击位置上进行攻击。 事实上,这个AI构想是很强大的如果你不是很厉害的五子棋高手的话,可能很快会被计算机打败。我在联众上可是中级棋手啊,跟这种构想打的时候胜率也不是很高。 使用vb.net编写五子棋 一、编写前的准备: 1、用计算机的思想描述整个下棋的过程 考虑步骤: (1)为了简便我们可以先让电脑先走第一步棋,电脑每走一步就会封掉许多玩家的获胜可能情况。 (2)当玩家走棋的时候我们首先应该考虑玩家走棋的合法性。 (3)如果合法,那么玩家也会封掉许多电脑的获胜的可能情况。 (4)电脑的思考路径:首先判断当前玩家和电脑的所有获胜组合是否需要进行加强赋值,

是进行加强赋值,否则进行普通的赋值。 (5)比较当前玩家和电脑谁的分值最大。将分值最大的点作为电脑的下一步走法。 2、利用vb.net窗体和图形工具建立五子棋的棋盘界面 (1)添加一个picturebox控件 作用:使用picturebox控件绘制棋子和棋盘 (2)添加一个label控件 作用:显示当前的获胜标志,也就是当某一方获胜或和棋时显示此标签。 (3)添加一个mainmenu控件 作用:控制游戏的开始或结束 (4)添加一个mediaplay组件 作用:使程序可以播放音乐。 3、设置整体框价 我们采取10*10的棋盘,为主要的平台。利用数组定义整个棋盘桌面,利用数组定义获胜组合以及获胜标志等。 二,声明全局数组和变量 定义虚拟桌面: Dim table(9, 9) As Integer 定义当前玩家桌面空格的分数: Dim pscore(9, 9) As Integer 定义当前电脑桌面空格的分数: Dim cscore(9, 9) As Integer 定义玩家的获胜组合: Dim pwin(9, 9, 191) As Boolean 定义电脑的获胜组合: Dim cwin(9, 9, 191) As Boolean 定义玩家的获胜组合标志: Dim pflag(191) As Boolean 定义电脑的获胜组合标志:

Dim cflag(191) As Boolean 定义游戏有效标志: Dim theplayflag As Boolean 三、初始化游戏 '*****************************************************************************

'** 模块名称: initplayenvironment

'**

'** 描述: 此函数主要功能如下:

'** 1. 设置背景音乐。

'** 2. 设置游戏状态有效。

'** 3. 初始化游戏状态标签。

'** 4. 直接指定电脑的第一步走法。

'** 5. 初始化基本得分桌面。

'** 6. 电脑和玩家获胜标志初始化。

'** 7. 初始化所有获胜组合。

'** 8. 重新设定玩家的获胜标志。

'**

'*****************************************************************************

Sub initplayenvironment()

player.FileName = ".\music\zhyu01.mid"

player.Play()

theplayflag = True

'游戏有效

Label1.Visible = False

'游戏状态标签不显示

PictureBox1.Refresh()

'清空picturebox1的内容

yuandian(130, 130)

'调用绘图函数绘制当前电脑先走的位置

Dim i, j, m, n As Integer

For i = 0 To 9

For j = 0 To 9

table(i, j) = 0

Next

Next

'桌面初始化

For i = 0 To 191

pflag(i) = True

cflag(i) = True

Next

'获胜标志初始化

table(4, 4) = 1

'由于我们设定电脑先手,并下了4,4位所以将其值设为1

''' ******** 初始化获胜组合 ********

n = 0

For i = 0 To 9

For j = 0 To 5

For m = 0 To 4

pwin(j + m, i, n) = True

cwin(j + m, i, n) = True

Next

n = n + 1

Next

Next

For i = 0 To 9

For j = 0 To 5

For m = 0 To 4

pwin(i, j + m, n) = True

cwin(i, j + m, n) = True

Next

n = n + 1

Next

Next

For i = 0 To 5

For j = 0 To 5

For m = 0 To 4

pwin(j + m, i + m, n) = True

cwin(j + m, i + m, n) = True

Next

n = n + 1

Next

Next

For i = 0 To 5

For j = 9 To 4 Step -1

For m = 0 To 4

pwin(j - m, i + m, n) = True

cwin(j - m, i + m, n) = True

Next

n = n + 1

Next

Next

''' ******** 初始化获胜组合结束 ********

For i = 0 To 191

If pwin(4, 4, i) = True Then

pflag(i) = False

End If

Next

'由于电脑已下了4,4位所以我们需要重新设定玩家的获胜标志

End Sub

四,处理鼠标事件 '*****************************************************************************

'** 模块名称: themousedown

'**

'** 描述: 此函数主要实行以下功能:

'** 1. 判定当前游戏标志是否有效。

'** 2. 将实际坐标转化成虚拟坐标。

'** 3. 绘制玩家的棋子。

'** 4. 执行检查获胜函数。

'** 5. 执行电脑算法函数。

'**

'*****************************************************************************

Sub themousedown(ByVal x As Integer, ByVal y As Integer)

If theplayflag = False Then

Exit Sub

End If

'检查游戏状态是否有效

Dim i, j As Integer

Dim zhx, zhy As Integer

zhx = Int((x - 10) / 30)

zhy = Int((y - 10) / 30)

For i = 0 To 9

For j = 0 To 9

If table(zhx, zhy) 0 Then

Exit Sub

End If

Next

Next

'检查当前鼠标点击的格子是否有效

Dim mycolor As Color

Dim g As System.Drawing.Graphics

g = PictureBox1.CreateGraphics

mycolor = Color.White

Dim brush1 As System.Drawing.Brush = New SolidBrush(mycolor)

g.FillEllipse(brush1, zhx * 30 + 10, zhy * 30 + 10, 30, 30)

'绘制玩家的棋子

table(zhx, zhy) = 2

For i = 0 To 191

If cwin(zhx, zhy, i) = True Then

cflag(i) = False

End If

Next

'重设电脑的获胜标志

checkwin()

'检查当前玩家是否获胜

diannao()

'调用电脑算法

End Sub 五、获胜检查算法。 '*****************************************************************************

'** 模块名称: checkwin

'**

'** 描述: 此模块执行以下功能:

'** 1. 检查是否和棋。

'** 2. 检查电脑是否获胜。

'** 3. 检查玩家是否获胜。

'**

'*****************************************************************************

Sub checkwin()

Dim i, j, k, m, n As Integer

Dim ca As Integer

Dim pa As Integer

Dim cnormal As Integer = 0

For i = 0 To 191

If cflag(i) = False Then

cnormal = cnormal + 1

End If

Next

If cnormal = 190 Then

Label1.Visible = True

Label1.Text = "和棋,请重新开始!"

PictureBox1.Refresh()

theplayflag = False

Exit Sub

End If

'设定和棋规则

For i = 0 To 191

If cflag(i) = True Then

ca = 0

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 1 Then

If cwin(j, k, i) = True Then

ca = ca + 1

End If

End If

Next

Next

If ca = 5 Then

Label1.Visible = True

Label1.Text = "电脑获胜,请重新开始"

PictureBox1.Refresh()

theplayflag = False

Exit Sub

End If

End If

Next

'检查电脑是否获胜

For i = 0 To 191

If pflag(i) = True Then

pa = 0

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 2 Then

If pwin(j, k, i) = True Then

pa = pa + 1

End If

End If

Next

Next

If pa = 5 Then

Label1.Visible = True

Label1.Text = "玩家获胜,请重新开始"

PictureBox1.Refresh()

theplayflag = False

Exit Sub

End If

End If

Next

'检查玩家是否获胜

End Sub  六、电脑算法 '*****************************************************************************

'** 模块名称: diannao

'**

'** 描述: 此程序主要执行以下功能:

'** 1. 初始化赋值系统。

'** 2. 赋值加强算法。

'** 3. 计算电脑和玩家的最佳攻击位。

'** 4. 比较电脑和玩家的最佳攻击位并决定电脑的最佳策略。

'** 5. 执行检查获胜函数。

'**

'***************************************************************************** Sub diannao()

Dim i, j, k, m, n As Integer

Dim dc As Integer

Dim cab As Integer

Dim pab As Integer

For i = 0 To 9

For j = 0 To 9

pscore(i, j) = 0

cscore(i, j) = 0

Next

Next

'初始化赋值数组

''' ******** 电脑加强算法 ********

For i = 0 To 191

If cflag(i) = True Then

cab = 0

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 1 Then

If cwin(j, k, i) = True Then

cab = cab + 1

End If

End If

Next

Next

Select Case cab

Case 3

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 0 Then

If cwin(m, n, i) = True Then

cscore(m, n) = cscore(m, n) + 5

End If

End If

Next

Next

Case 4

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 0 Then

If cwin(m, n, i) = True Then

yuandian(m * 30 + 10, n * 30 + 10)

table(m, n) = 1

For dc = 0 To 191

If pwin(m, n, dc) = True Then

pflag(dc) = False

checkwin()

Exit Sub

End If

Next

End If

End If

Next

Next

End Select

End If

Next

For i = 0 To 191

If pflag(i) = True Then

pab = 0

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 2 Then

If pwin(j, k, i) = True Then

pab = pab + 1

End If

End If

Next

Next

Select Case pab

Case 3

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 0 Then

If pwin(m, n, i) = True Then

pscore(m, n) = pscore(m, n) + 30

End If

End If

Next

Next

Case 4

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 0 Then

If pwin(m, n, i) = True Then

yuandian(m * 30 + 10, n * 30 + 10)

table(m, n) = 1

For dc = 0 To 191

If pwin(m, n, dc) = True Then

pflag(dc) = False

checkwin()

Exit Sub

End If

Next

End If

End If

Next

Next

End Select

End If

Next

''' ******** 电脑加强算法结束 ******** ' ******** 赋值系统 ********

For i = 0 To 191

If cflag(i) = True Then

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 0 Then

If cwin(j, k, i) = True Then

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 1 Then

If cwin(m, n, i) = True Then

cscore(j, k) = cscore(j, k) + 1

End If

End If

Next

Next

End If

End If

Next

Next

End If

Next

For i = 0 To 191

If pflag(i) = True Then

For j = 0 To 9

For k = 0 To 9

If table(j, k) = 0 Then

If pwin(j, k, i) = True Then

For m = 0 To 9

For n = 0 To 9

If table(m, n) = 2 Then

If pwin(m, n, i) = True Then

pscore(j, k) = pscore(j, k) + 1

End If

End If

Next

Next

End If

End If

Next

Next

End If

Next

''' ******** 赋值系统结束 ********

''' ******** 分值比较算法 ********

Dim a, b, c, d As Integer

Dim cs As Integer = 0

Dim ps As Integer = 0

For i = 0 To 9

For j = 0 To 9

If cscore(i, j) cs Then

cs = cscore(i, j)

a = i

b = j

End If

Next

Next

For i = 0 To 9

For j = 0 To 9

If pscore(i, j) ps Then

ps = pscore(i, j)

c = i

d = j

End If

Next

Next

If cs ps Then

yuandian(a * 30 + 10, b * 30 + 10)

table(a, b) = 1

For i = 0 To 191

If pwin(a, b, i) = True Then

pflag(i) = False

End If

Next

Else

yuandian(c * 30 + 10, d * 30 + 10)

table(c, d) = 1

For i = 0 To 191

If pwin(c, d, i) = True Then

pflag(i) = False

End If

Next

End If

''' ******** 分值比较算法结束 ********

checkwin()

End Sub 七、绘制棋子 '*****************************************************************************

'** 模块名称: yuandian

'**

'** 描述: 此函数主要进行电脑棋子的绘制。

'**

'***************************************************************************** Sub yuandian(ByVal x As Integer, ByVal y As Integer)

Dim mycolor As Color

Dim g As System.Drawing.Graphics

g = PictureBox1.CreateGraphics

Dim zhx, zhy As Integer

zhx = Int((x - 10) / 30)

zhy = Int((y - 10) / 30)

mycolor = Color.Black

Dim brush1 As System.Drawing.Brush = New SolidBrush(mycolor)

g.FillEllipse(brush1, zhx * 30 + 10, zhy * 30 + 10, 30, 30)

End Sub

在VB.net中如何取变量、结构、数组、函数的地址?

当然可以的,需要System.Runtime.InteropServices 命名空间中的 Marshal 类

Imports System.Runtime.InteropServices '这里一定要有 

Public Class Form1

Public Structure m_Point

Dim x As Integer

Dim y As Integer

End Structure

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

Dim i As Integer = 50

Dim ai() As Integer = {1, 2, 3, 4, 5}

Dim pi As IntPtr = GCHandle.Alloc(i, GCHandleType.Pinned).AddrOfPinnedObject() '取得整形变量的指针 

Dim pai As IntPtr = GCHandle.Alloc(ai, GCHandleType.Pinned).AddrOfPinnedObject() '取得整形数组首地址指针

MsgBox(Marshal.ReadInt32(pi, 0)) '读回整形变量指针指向的值

MsgBox(Marshal.ReadInt32(pai, 0 * 4)) '读回数组的第一个元素

MsgBox(Marshal.ReadInt32(pai, 1 * 4)) '读回数组的第二个元素

MsgBox(Marshal.ReadInt32(pai, 2 * 4)) '读回数组的第三个元素

'-----下面是结构--------------------------

Dim m_p As New m_Point

m_p.x = 100

m_p.y = 50

Dim pm_p As IntPtr = GCHandle.Alloc(m_p, GCHandleType.Pinned).AddrOfPinnedObject() '取得结构首地址指针 

MsgBox(Marshal.ReadInt32(pm_p, 0 * 4)) '读回结构的第一个值

MsgBox(Marshal.ReadInt32(pm_p, 1 * 4)) '读回结构的第二个值

End Sub

End Class

vb.net python哪个好

要去专业学习,建议选Python

个人认为二者各有利弊。

vb.net是由vb化来的,Python被称为“最贴近自然语言的编程语言”,都比较容易上手;

vb.net可以高效开发有图形界面的应用,Python需要Gui库等,可能稍逊一筹;

但Python作为十分高级的脚本语言,十分适合AI开发,也因此具有潜力。

最后,祝你在编程的路上渐行渐远,乐此不疲。蓦然回首数载,尽享编程美好!

用VS2015,创建的VB.NET应用程序,如何同时操作两个EXCEL工作簿

首先定义

Public xlApp As Excel.Application

Public xlBook As Excel.Workbook Public xlSheet As Excel.Worksheet然后创建对象

xlApp = CreateObject("Excel.Application") '创建EXCEL对象

xlBook = xlApp.Workbooks.Open("文件路径") '打开已经存在的EXCEL工件簿文件

xlSheet = xlBook.Worksheets("sheet1")

BtOfficer之VB/VBA/VBS系列概览(2021版)

光阴似箭,2021也在各种争吵中落下帷幕,开通自媒体账号也已有300天,这期间有落寞,也有惊喜。 落寞的是,VB家族的确已日薄西山 ,从大家的反馈中亦可窥见势微之一二。惊喜的是, 在业余编程群体中,VB/VBA/VBS仍然是他们的最爱 。业余编程,要想产生更有价值的成果,专业概念(学习)是绕不过的。但 在极为有限的投入下(时间、精力、意愿),如何平衡简单粗暴与精细专深之间的矛盾?

VB家族从诞生之日起,就镌刻着计算机编程教育的基因。 很多人只看到了VB作为可视化编程的先驱,曾经红极一时,却看不到其真正的易用性和低门槛,在于骨子里的编程启蒙教育理念。 天下编程工具,多如牛毛,唯VB(BASIC)是为教育而生。 所以,VB系列极易上手。但 成也萧何败也萧何,VB家族的势微,也同样与其基因有关。

在BASIC和VB的时代,计算机编程尚是一野荒地, 编程是使用计算机的必经之路。 但随着操作系统的崛起和完善,随着现代软件业的繁荣,编程已经发展成为一个令人瞩目的职业。人们使用计算机(PC、智能手机及其他终端设备),完全凭借一些观感就可上车,甚至横行霸道。 编程作为一个专业,无论是教育还是应用,都已发展成为一个极为成熟的产业。

在一个极细分工的现代 社会 里,需要的是专业的人做专业的事。 为非专业的人提供非专业的编程工具,逻辑上已发生了翻天覆地的变化。它 不再需要像若干年前那样直面代码,取而代之的是AI辅佐下的各种轻代码或奔自然语言编程,本质上是如何使用存量代码库的应用问题。所以, 轮子封装性不够的VB家族,败下阵来也在情理之中。

AI究竟会将人类带向何处?就目前而言还看不出端倪 ,至少在很长一段时间里,AI还是没有办法取代人类的主观能动性。 VB/VBA这种直面代码的业余方式,仍然是很多人最稳妥的选择。 所以BtOfficer将VB家族作为首推分享板块,具体理由已在过往文章中阐述过。 本着为广大非职业IT普及适用的IT技术框架,本文将过往文章(200多篇)分类整理于此(『《 蓝色 》』为链接样式,可点击查阅),以便各位取阅,为后续深入学习打下信心、概念方面的基础。

1、是什么促使BtOfficer要分享IT技术?

尽管有简单易用的Python和C#后来居上,但他们的概念体系仍然是建立在专业者的角度。纯现代意义的初学者语言,除了少儿编程外,几乎不再有生存的土壤。 造成这一结果的根本原因,在于专业编码的巨大存量。 很多人,包括专业编码者们或许都坚定地认为, 未来很长一段时间,传统码手的地位都不可动摇。

但事实并非如此(《AI写代码,来得让人猝不及防!》《程序员是怎么记住许许多多的语法的?》 可见一斑 ) ,在数据量尚未积累得足够庞大之前,凭经验谁也不知道还有哪些关系尚未被人类发现。尿不湿与啤酒的故事,就是 数据的规模化效应 之一。 世间万物之间,并非看得见的才叫因果,很多看不见的往往成为神论。然而,人类已经发现了通往神秘之门的钥匙。

一个个小小的人,以匹夫之勇在地表,举不足百斤,卧不过三尺,走不及风水。但聚众之力,可移山改川,可星辰大海,在广袤的地表和太空遍布文明的痕迹。人类的光芒,闪耀在遥遥太空之中。人类的触手正如藤蔓,一个锚点一个锚点地快速向前。 集众之智乃大智,这便是那把钥匙。

互联网AI便是 集众之智 ,即便硅基芯片不能真正地成为人工智能的栖身之所,攫取众人之智,已足以让其变得强大无比。然而, 这是人类整体层面上的某种进化,对于个体而言或许很难避免被“压榨”的过程 。 如何更全面、更客观地看待和适应自身的处境?或许《 互联的围城,已春暖花开,我却心向罗盘荒野 》可以告诉你。

该文首先,从AI的概念讲起,因为AI与互联网的合一,是二者在当前技术框架下,必然的进化方向,而AI正是关乎进化的关键。其次,讲AI与互联网的现实、进化,我等是如何自陷,又如何自救。摘自该文一小段的《 大数据能可怕到什么程度? 》获得了近40万阅读和近1000赞的成绩,但更全面的文章却仅有100阅读和3赞。 尽管数字世界里(包括以后的元宇宙),跨越边界成为特权,从而重塑传统边界的定义,但并不妨碍我们建设和守好现有的传统边界。因为二者并非『不是你死便我亡』的互斥关系。

众智与小智之间,应当各有各的生存空间,应当互惠互利,相互成就,而非一厢情愿。小智不能滥竽充数,坐享众智之便。众智之上的AI也不能恃强凌弱,奴役个体。这就是为什么BtOfficer要分享IT技术给广大非IT人员的原因所在。

2、为什么鼓励非IT适当掌握编程技能?

诚如华为任正非谈 公司人才体系 所说,作为管理者,你 不能要求每个员工都成为奋斗者 。有的员工就想领点工资按时上下班,你得容忍和尊重这样的员工。对于编程而言,并不是每个非IT都有必要来学,和愿意来学。即便学了的,也不是每个人都愿意更精进, 得尊重那些得过且过的存在。

所谓 有钱难买我愿意 ,即便互联网里高墙林立,即便智能手机上的APP都在觊觎个人隐私,能架住不用?如何平衡个体人的发展与人类整体发展之间的矛盾,也不是每个人必须要去思考和应对的。 所以,明知山有虎,偏向虎山行的都是少数派,毕竟佛度有缘人嘛。任何一位奋斗者所收获的,也绝非普通人所能想象的。不一样的风景,得有不一样的位置去观察。

在《 明比阅历浅,暗拼体力衰,指下讲武德,码上笑春风 》一文中,详细地分析了非IT人士是否需要掌握编程技能,掌握到何种程度,入门原则,入门工具的挑选原则,为何挑选VB系作为入门工具,如何开启编码武德之旅。

BtOfficer的经验证明,当1个专业人士掌握了地球上最通用的计算工具之后,可以将专业优势进行数倍的放大。无论是工作效率,学习效率,还是在整合人际关系上,均能受益不少。 这是在互联网包围下的个体,能够获得的为数不多的神器之一。

3、为什么偏偏首推VB/VBA/VBS作为业余编程的入门工具?

有人说,VB(包括BASIC)当年成为入门的不二法门,是因为没得选,而现今有更好的选择了。 这句话,既正确又不正确。它得考虑受众是谁?如果一个人有意愿,也有时间,为什么要学VB呢?成为编码专业人士的渠道千千万,但最后都离不开基础,与其在捷径中胡乱碰撞,还不如从基础开始一步一个脚印。

什么是基础?那是半导体工业体系历经上百年的沉淀。或许有人认为这么说很夸张,软件尤其是系统屏蔽了很多硬件层的东西,从而使得软硬件分离。事实上,就网上漂浮的绝大部分码手,离硬件都非常的遥远。但这并不能说,不懂硬件,不了解硬件就能做好这一行业。 恰恰是懂硬件者,才是基本盘的操持者,微软、苹果、谷歌等概莫能外。

过来人都清楚,要 想掌握半导体工业在软件层的映射,绝非一朝一日之事 。专业人士,爬过高考,躺过本硕博,再经若干项目的锤炼,都不一定能成为行家。上过几十个IT素质教育课时的童鞋们,凭什么能成为IT专家?在不同基础层面来看, 有基础的可选项的确是多了,但对没有基础的人而言, 历史 的发展并未过多地偏向他们,留给业余人士的选项并未因此而增加。所以,地毯式的专业学习之路,压根就不适合业余编程选手。

4、VB/VBA/VBS分享定位在什么层面?

在分享期间,有不少朋友询问能否普及更基础一点的概念。VB/VBA/VBS的基础部分,网上有太多的资料,也有太多自媒体运营者在分享相关内容,再重复并无太多意义。所以这部分,BtOfficer 主要针对流行的一些错误进行纠正。反倒是VB/VBA/VBS很根底的内容,在网上很难见到,BtOfficer会着重围绕这部分进行分享。

在后续分享的 VB/VBA/VBS插件里,会包括更系统的基础知识,从语法语句到内置函数,再到API和具体应用源码案例,均以动态帮助的形式呈现给用户 ,有需要的届时可下载使用。

虽然,大部分内容适合有一定基础的朋友,比如讲原理的部分。但这并不意味着,分享的内容不适合初入门的人。 VB系大道至简, 再深入的东西,回到最后都是简单的语句和函数 。 针对语句用法用例上的结论,是通用的。掌握这些结论,便可不费吹灰之力就可提升代码的质量。 即便有些内容现阶段够不着,在往后的应用中,迟早都有见面的那一天。待到那时,翻出来看一看,想必会顺利很多。

更何况, 深入VB的部分(尤其是BtOfficer改进VB的部分),对绝大部分VB用户都是一样的,是一个全新的领域。 总之, 如果信哥,那就跟我走,必然会还你一个非同凡响的VB家族。

没有什么比过时、淘汰更能让人感到沮丧的了。尤其是对VB家族而言,没有前途的言论正在主宰着入门者清秀的眼神。 但很少有人去问,为何过了半个世纪,BASIC的后人依然在数千种开发工具中位居前20(据坊间流传的排行榜)。要知道,现在微软的GitHub Copilot可以根据功能注释自动补全(写)代码了。所以,有必要去一探究竟,为正确的选择提供充足的参考。

1、操作系统与开发工具之间的关系

正如前文所说,现代开发工具,在操作系统的加持下,让很多开发者能够远离硬件端,而成为纯软件开发者。网络上大部分争得面红耳赤的,都是没能遵循凡事看硬件的基本逻辑。相信很多人也不会去想,操作系统和开发工具之间的关系。那么《 以史为鉴,编程语言,启示录之系统觉醒 》将是一个不错的概览。

编程语言源自机械时代,随着硬件的进化完善,而不断演化。 从救人于水火的助记汇编、到专注于科学计算的面向过程,再到可扩展易维护的面向对象,无一不是硬件在推波助澜。就 个人计算机而言,硬件体系在32位时代,就趋于稳定。后续的64位,也只不过是锦上添花而已。 每一种计算机语言,都诞生于特殊的需求,并经不断完善,才有后来的样子。 这就意味着,每种语言都有长短之处。每个人的学习也应当有所侧重,追求全能,就像Multics,注定很难有结果。 没有过时的语言,只有趁手的工具。 现代操作系统,将硬件层隔离,让应用开发者远离底层,这让 很多人误以为,语言决定一切。孰不知,高级语言只是硬件的传话筒而已,二进制指令才是机器上的唱歌的角儿。脱离硬件讲语言,知其一不知其二也。

2、BASIC、VB与VB.Net和PC操作系统(Windows)之间的关系

现代常青的开发工具,包括C在内,都汲取了很多前人的智慧。所以,评估一项开发工具是否适合自己的技术路线,很有必要去了解这项工具的设计意图,当时技术的局限,以及后续的发展历程。《 VB前传,从教学到 游戏 ,再到系统,似乎每步都是精心设计 》一文便讲述了被淹没在 历史 中的那段过往。

与BASIC一脉相承的VB,吸收了计算机发展史上,数种优秀开发语言的优点,最终落脚于服务普通大众。因为心胸开阔的Kemeny和Kurtz深知,人才是计算机的灵魂和归宿,普通大众才能赋予计算机无限可能。BASIC的 历史 脉络,也告诉后继的使用者,简单里有深厚的哲学,抓住得住时机,才有自己的时代。

不必苛责VB什么,找到合适的位置,这是BASIC立足于教育,带给我们的启示。诚如Kemeny所说,关键要看用户能否意识到哪些是计算机可以做的,哪些是计算机不能做的。但很肯定,它能给企业和大部分私人生活带来影响。

如果说BASIC时代属于混沌的前者,那么VB就属于清醒的后者。《 早判了,VB已死,但我说话了么? 》一文将带你了解属于VB的哲学。在普通人通往程序之路上,VB就像摆渡人,接来一批又送走一批。 VB存世的意义,或许就在于既普世又度人。心清脑秀者,许你3%得道升华。资历平平者,也许你97%的凡人吃喝。

VB的世界里有自由的周全,也有刻薄的束缚。她试图让所有人都能踏进编程的世界,并在这个晦涩的世界里护其周全。她也总拿自由不是没有代价来告诫使用者,知其然还要知其所以然,到远方去才是 旅游 的意义。

正如《 VB/VBA,请让我点名表扬你 》所说,深入理解VB的 历史 ,仍是把握VB适用场景的关键。

3、VB过时淘汰之说蔚然成风,真实的信息是什么?

要说过时淘汰,很显然并没有,至少VBA还在大行其道。《 VB/VBA这个打不死的小强,还会坚持多久? 》一文,便围绕『语言之争』的若干问题,摆事实讲依据,就Python与VBA,VB与VB.NET之间的恩恩怨怨来了个起底和辟谣。在这篇文章里,援引了微软针对VB在各大系统的支持政策。从中不难发现,所谓VB之死,不过是IDE停止更新罢了。所谓Python替代VBA,不过是一投票帖数千点赞而已。属于咱业余户的家伙事,会继续在Win10/Win11上演绎不老传说。

4、VB死掉的是什么,活下来的又是什么?

此时的VB和彼时的VB,所处的技术环境和商业环境是不一样的。如今VB势微,更多的是指商业开发领域的工作机会。《VB、Delphi等编程语言没落的主要原因有哪些?》或许可以回答VB过时淘汰的根本来源。

作为专业的高级开发语言而言,它必须在高级的路上不断的进化,才会有开发人员使用。大量开发人员的使用,才会降低项目的实施成本。相反,如果得不到进化,那么开发的人才资源,就会逐渐枯竭,从而提高项目的成本,进而影响项目的技术路线。 对于专业开发人员而言,掌握一项停止进化的的高级开发语言,就意味着工作机会的收缩。

但这对于一项可实施的技术而言,并不妨碍它继续工作。所以 这种落败,不是指技术,而是指就业机会的凋零。 就VB和Delphi而言,只要不用于糊口的工作,他们仍然是桌面应用开发的一把好手。正如《影响VB/VBA商业价值的原因是什么?》中所说,VB/VBA会逐渐演变成自产自用的小工具生产者角色。

5、打不死的VB,何以存活?

《为什么Windows的兼容性这么强大,到底用了什么技术?》,或许从系统的兼容特性,一直追溯到X86硬件体系,方能明白,小强不死,是有深层次原因的。

6、场景与前景

《Python取代VBA?先问C#答应否》《Office开发,选VSTO,还是VBA,Python行吗?》《VBA源码可以编译吗?》《VBA是脚本语言吗?》《Excel公式算编程?还别说,真是一门编程语言!》《VB/VBA的改进思考》《为什么VBA名列最讨厌编程语言第一名?》

《vb/vba的数据类型,有大佬可深度介绍下吗?》《VB的任性,从Variant开始》《VB的天地,横看成岭侧成峰》《VB的整数,你真的了解?》《知VBA的浮点数结构,更懂算力》《VB/VBA的无符号整数》《VB/VBA之Boolean的坑,防不胜防,治标还得治本》《VB中Byte、Bool和Int与Lng的开销及性能相同吗?》《VB/VBA字符串》《VB/VBA的ByVal和ByRef》《VB/VBA中Variant不仅是容器,充当传参的Any,更可以当函数用哦》《大家都有哪些提高VBA/VB代码运行效率的小技巧?》...哎哟,太多了,懒得整理了,有兴趣的自己去翻吧。

欢迎关注BtOfficer(收藏、点赞、关注+转发) ,更多精彩仍在继续哦(专栏文章将更系统,更全面,但需要阁下支持哦),有严肃的技术,也有轻松的唠嗑,期待你的加入!


当前标题:VB.net和ai VBnet
转载来源:http://ybzwz.com/article/doojehj.html