长字源码
‘壹’ 中分,紧急求个200行左右的C语言源代码!
#include <iostream.h>
#include <fstream.h>
int mark[]; //右来保存走法的
int num[2][2];//棋盘
int temp;
int k ;
int q ;
string strAim = "123804765" //目标字符串,空格用0表示
string States[100];//字符窜数组
int iQuick; //有来退出递归的标志,1,表示找到走法,可以退出,0,怎么没有找到走法,继续走
Hrd(int i,int j)//华龙道算法,好像能找到结果,但是不能找到最少步数的结果,我不确定会不会还有漏洞。结果保存在mark[]中
{ string str1;
if (i!=0) //如果可以向上走,则向上走一步
{
temp=num[i-1][j];
num[i-1][j]=num[i][j];
num[i][j]=temp ; //交换空格和它上面的数字
// 保存交换后的状态
str1=Change2Str(num[][]); //转化成字符串,用来比较
if (CompState(str1)) //比较变换后的状态是否在以前的状态中出现过
{
//如果以前出现过,则返回
temp=num[i-1][j];
num[i-1][j]=num[i][j];
num[i][j]=temp ; // 把原来交换过的数字再交换过来
return ;
}
else//比较后,发现目前的状态以前没有出现过
{ mark[k++]=1 ;
if(strcmp(&strAim,& str1)=1)//跟目标比,看是否相等
{
iquick=1;
return;
}
else //不相等,没有达到最后我们的要求
{
//1 代表向上走了一步
Add2States(str1); //保存现在的状态到状态数组中
Hrd(i-1,j);
if (iquick=1) //可以退出
{
return;
}
} //递归,继续遍历
}
}
if(j!=2)//如果可以向右走,则向右走一步
{
temp=num[i][j+1];
num[i][j+1]=num[i][j] ;
num[i][j]=temp;
// 保存交换后的状态
str1=Change2Str(num[][]); //转化成字符串,用来比较
if (CompState(str1)) //比较变换后的状态是否在以前的状态中出现过
{
//如果以前出现过,返回
temp=num[i][j+1];
num[i][j+1]=num[i][j] ;
num[i][j]=temp; // 把原来交换过的数字再交换过来
return;
}
else//比较后,发现目前的状态以前没有出现过
{ mark[k++]=2 ; //2 代表向右走了一步
if(strcmp(&strAim,& str1)=1)//跟目标比,看是否相等
{
iquick=1;
return;
}
else //没有达到结果
{
Add2States(str1); //保存现在的状态到状态数组中
Hrd(i,j+1) ; //递归,继续遍历
if (iquick=1)
{
return;
}
}
}
}
if (i!=2)// 如果可以向下走,则向下走一步
{
temp=num[i+1][j];
num[i+1][j]=num[i][j];
num[i][j]=temp;
// 保存交换后的状态
str1=Change2Str(num[][]); //转化成字符串,用来比较
if (CompState(str1)) //比较变换后的状态是否在以前的状态中出现过
{
//如果以前出现过,则返回
temp=num[i+1][j];
num[i+1][j]=num[i][j];
num[i][j]=temp; // 把原来交换过的数字再交换过来
return ;
}
else//比较后,发现目前的状态以前没有出现过
{ mark[k++]=3 ; //3 代表向下走了一步
if(strcmp(&strAim,& str1)=1)//跟目标比,看是否相等
{
iquick=1;
return;
}
else //没有达到最后我们的要求
{
Add2States(str1); //保存现在的状态到状态数组中
Hrd(i+1,j) ; //递归,继续遍历
if (iquick=1)
{
return;
}
}
}
}
if (j!=0)//如果可以向左走,则向左走一步
{
temp=num[i1][j-1];
num[i][j-1]=num[i][j];
num[i][j]=temp;
// 保存交换后的状态
str1=Change2Str(num[][]); //转化成字符串,用来比较
if (CompState(str1)) //比较变换后的状态是否在以前的状态中出现过
{
//如果以前出现过,则回溯
temp=num[i][j-1];
num[i][j-1]=num[i][j];
num[i][j]=temp; // 把原来交换过的数字再交换过来
return ;
}
else//比较后,发现目前的状态以前没有出现过
{ mark[k++]=4 ; //1 代表向右走了一步
if(strcmp(&strAim,& str1)=1)//跟目标比,看是否相等
{
iquick=1;
return;
}
else //没有达到最后我们的要求
{
Add2States(str1); //保存现在的状态到状态数组中
Hrd(i,j-1) ; //递归,继续遍历
if (iquick=1)
{
return;
}
}
}
}
//如果都走过了,则返回
k--;
return;
}
void Change2Str(int arr[][])// 把二维数组转换成一个字符串
{int i,j
string strState
for (i=0;i<3 ;i++ )
{ for (j=0;j<3 ;j++ )
{
strState= strState & arr[i][j];
}
}
return strState;
}
void CompState(string str1 )//比较当前的状态是否再以前的状态中出现过
{ int i;
for (i=0;i<len(states[])-1 ; i++)//len(states[]),取得数组的长度,有点忘了
{
if (strcmp(&States[i],&str1)!=0)//如果两个字符串相等,则函数返回true
{
return true;
}
}
return false;
}
Add2States(string str1)
{
States[q++]=str1 ;
}
main()
{ num[0][0]=1;
num[0][1]=2;
num[0][2]=3;
num[1][0]=8;
num[1][1]=6;
num[1][2]=4;
num[2][0]=1;
num[2][1]=0;
num[2][2]=5;
hrd(2,1);
for(int i=0 ,i<100,i++)
{count<<mark[i]<<endl;
}
}
Dim moveup As Integer '蛇向上转向的标志
Dim movedown As Integer
Dim moveleft As Integer
Dim moveright As Integer
Public u As Integer 'u,l,r,d为蛇转向时的控制数值
Public d As Integer
Public l As Integer
Public r As Integer
Public score As Integer '游戏分数
Public speed As Integer '游戏速度
Public pause As Boolean '游戏暂停标志
Public gamebegin As Boolean '游戏开始标志
Public s As Integer '蛇的当前长度,开始时设为6
Public eatd As Boolean '蛇是否吃到食物的标志
Public lastx As Integer '若蛇吃到食物,lastx,lasty用来存放当前最后一个shape的运动状态,以供设定新的shape运动状态之用
Public lasty As Integer
Option Base 1
Dim X(100) As Long '数组存放蛇的长度
Dim Y(100) As Long
Public Sub eat() '判断蛇是否吃到食物的函数
If X(1) = -200 Then
If Shape1(1).Left <= Shape2.Left And Shape1(1).Top = Shape2.Top Then
eatd = True
End If
End If
If Y(1) = -200 Then
If Shape1(1).Top <= Shape2.Top And Shape1(1).Left = Shape2.Left Then
eatd = True
End If
End If
If X(1) = 200 Then
If Shape1(1).Left >= Shape2.Left + 200 And Shape1(1).Top = Shape2.Top Then
eatd = True
End If
End If
If Y(1) = 200 Then
If Shape1(1).Top >= Shape2.Top + 200 And Shape1(1).Left = Shape2.Left Then
eatd = True
End If
End If
End Sub
Public Sub ensure_position() '此函数确定新的shape1(s)的位置
If X(s - 1) = -200 Then
Shape1(s).Left = Shape1(s - 1).Left + 200: Shape1(s).Top = Shape1(s - 1).Top
End If
If Y(s - 1) = -200 Then
Shape1(s).Left = Shape1(s - 1).Left: Shape1(s).Top = Shape1(s - 1).Top + 200
End If
If X(s - 1) = 200 Then
Shape1(s).Left = Shape1(s - 1).Left - 200: Shape1(s).Top = Shape1(s - 1).Top
End If
If Y(s - 1) = 200 Then
Shape1(s).Left = Shape1(s - 1).Left: Shape1(s).Top = Shape1(s - 1).Top - 200
End If
End Sub
Public Sub ensure_state() '此过程用来确定新的控件的初始运动状态
If X(1) = -200 Then
If moveleft = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
If Y(1) = -200 Then
If moveup = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
If X(1) = 200 Then
If moveright = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
If Y(1) = 200 Then
If movedown = 1 Then
X(s) = X(s - 1): Y(s) = Y(s - 1)
Else
X(s) = lastx: Y(s) = lasty
End If
End If
End Sub
Public Sub strike_oneself() '测试蛇头是否撞到自己
Dim i
Dim j: j = 0
If Y(1) = 200 Then '蛇头向下撞到自己
For i = 7 To s '蛇头只能和第六块或以后的蛇身相撞
If Shape1(1).Top = Shape1(s).Top And Shape1(1).Left = Shape1(s).Left Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If
If X(1) = 200 Then '蛇头向右撞到自己
For i = 7 To s
If Shape1(1).Left = Shape1(i).Left - 200 And Shape1(1).Top = Shape1(i).Top Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If
If Y(1) = -200 Then '蛇头向上撞到自己
For i = 7 To s
If Shape1(1).Top = Shape1(i).Top + 200 And Shape1(1).Left = Shape1(i).Left Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If
If X(1) = -200 Then '蛇头向左撞到自己
For i = 7 To s
If Shape1(1).Left = Shape1(i).Left + 200 And Shape1(1).Top = Shape1(i).Top Then
Form1.initialize
Form1.outputmessage
Exit For
End If
Next i
End If
End Sub
Public Sub strike_wall() '测试蛇头是否撞到墙壁
If Shape1(1).Top < 0 Or Shape1(1).Top > Line1.Y1 - 200 Or Shape1(1).Left < 0 Or Shape1(1).Left > Form1.Width - 200 Then
Form1.outputmessage
Form1.initialize
End If
End Sub
Public Sub outputmessage() ' 游戏结束后的输出信息
gameovermessage = "GAME OVER!"
dx = (8000 - TextWidth(gameovermessage)) / 2 '在窗体中间输出"GAME OVER!"和得分
dy = (6000 - TextHeight(gameovermessage)) / 2
CurrentX = dx: CurrentY = dy
Form1.Print gameovermessage
scoremessage = "你的得分:" + Text1.Text
dx = (8000 - TextWidth(scoremessage)) / 2
dy = dy + TextHeight(scoremessage)
CurrentX = dx: CurrentY = dy
Form1.Print scoremessage
End Sub
Public Sub initialize() '游戏结束(失败)后,游戏初始化函数
moveup = 0
movedown = 0
moveleft = 0
moveright = 0
u = 0: d = 0: l = 0: r = 0
Label5.Caption = "停止"
For i = 1 To s ' 初始化蛇的位置和状态
Shape1(i).Left = 1200 + (6 - i) * 200
Shape1(i).Top = 5000
X(i) = 200
Y(i) = 0
Next i
If s > 6 Then
For i = 7 To s
Unload Shape1(i) '卸载多余的shape,使初始的shape个数为六个
Next i
End If
'以下的这段是用来查看游戏初始化时的中的参数
'CurrentX = 0: CurrentY = 0
'Form1.FontSize = 10
'Print moveup: Print movedown: Print moveleft: Print moveright
'Print u: Print r: Print l: Print d
'For i = 1 To s
'Print X(i): Print Y(i)
'Next i
s = 6
Timer1.Enabled = False
gamebegin = False '游戏未开始
pause = False
HScroll1.Enabled = True
End Sub
Private Sub Command1_Click()
Timer1.Enabled = False
Dim r
r = MsgBox("你真的要退出吗?", 33, "警告")
If r = 1 Then
Unload Form1
Else
Timer1.Enabled = True
End If
End Sub
Private Sub Form_KeyPress(keyascii As Integer)
If gamebegin = True And pause = False Then '只有游戏处于开始时方向键才有效
'下面四个if语句是蛇的方向控制函数
If keyascii = 119 Then
If Y(1) <> 200 Then '只有当蛇头不正好向下运动时,按下向上才有效
moveup = 1 '向下上为w
End If
End If
If keyascii = 97 Then '向左为a
If X(1) <> 200 Then
moveleft = 1
End If
End If
If keyascii = 115 Then '向下为s
If Y(1) <> -200 Then
movedown = 1
End If
End If
If keyascii = 100 Then '向右为d
If X(1) <> -200 Then
moveright = 1
End If
End If
End If
If keyascii = 32 Then '判断游戏是否在开始,按下空格键开始,否则按下空格键为暂停
If gamebegin = False Then
Timer1.Enabled = True
Label5.Caption = "开始"
Form1.Cls
score = 0
Text1.Text = Str$(score)
HScroll1.Enabled = False
gamebegin = True
Else
If pause = True Then '判断暂停与否
Timer1.Enabled = True
Label5.Caption = "开始"
Else
Timer1.Enabled = False
Label5.Caption = "暂停"
End If
pause = Not pause
End If
End If
End Sub
Private Sub Form_Load() '对各参数的初始化
moveup = 0
moveleft = 0
moveright = 0
movedown = 0
u = 0: l = 0: d = 0: r = 0
s = 6 '蛇的初始长度
eatd = False
gamebegin = False
pause = False
speed = HScroll1.Value '初始速度
Label5.Caption = "停止"
Dim i
For i = 1 To s '蛇的初始运动方向
X(i) = 200
Y(i) = 0
Next i
Timer1.Enabled = False '没开始游戏
Shape2.Left = 200 * Int(30 * Rnd) '贪吃蛇的食物的位置初始化
Shape2.Top = 200 * Int(30 * Rnd)
End Sub
Private Sub HScroll1_Change()
speed = HScroll1.Value
End Sub
Private Sub Timer1_Timer()
Timer1.Interval = 150 / speed '游戏速度
If movedown = 1 Then '按下下方向键,蛇向下转向
d = d + 1
X(d) = 0: Y(d) = 200
If d = s Then
movedown = 0: d = 0
End If
End If
If moveup = 1 Then '按下向上方向键,蛇向上转向
u = u + 1
X(u) = 0: Y(u) = -200
If u = s Then
moveup = 0: u = 0
End If
End If
If moveleft = 1 Then '向左
l = l + 1
X(l) = -200: Y(l) = 0
If l = s Then
moveleft = 0: l = 0
End If
End If
If moveright = 1 Then '向右
r = r + 1
X(r) = 200: Y(r) = 0
If r = s Then
moveright = 0: r = 0
End If
End If
Dim i '蛇的运动代码
For i = 1 To s
Shape1(i).Left = Shape1(i).Left + X(i)
Shape1(i).Top = Shape1(i).Top + Y(i)
Next i
Form1.eat '调用过程eat(),判断蛇是否吃了食物
If eatd = True Then
score = score + 5 * HScroll1.Value
Text1.Text = Str$(score)
Shape2.Left = 200 * Int(30 * Rnd) '如果食物被吃则随机产生贪吃蛇的食物的位置
Shape2.Top = 200 * Int(30 * Rnd)
Shape2.FillColor = RGB(Int(255 * Rnd), Int(255 * Rnd), Int(255 * Rnd)) '随机产生食物的颜色
If Shape2.FillColor = &H0& Then
Shape2.FillColor = RGB(100, 150, 200)
End If
lastx = X(s) '蛇吃到食物,lastx,lasty用来存放当前最后一个shape的运动状态-
lasty = Y(s) '-以供设定新的shape运动状态之用
s = s + 1
Load Shape1(s) '产生新的控件shape1数组,使蛇的长度加长
Form1.ensure_state '调用设定新的shape控件的运动状态过程
Form1.ensure_position '设定新的shape1的位置
Shape1(s).Visible = True
eatd = False
End If
Form1.strike_oneself '测试游戏是否失败的函数
Form1.strike_wall
End Sub
‘贰’ 计算机字长为8位,求-27的二进制源码和补码
概念:
负数的补码是:=>源码=>反码=>末尾+1=>得到补码!
-27:补码:
先看正27的源码:=>0001 1011
取反 :=>1110 0100 (反码)
末尾加1 :=>1110 0101 (这个就是-27的补码)
你也可以还原他!
补码末尾减1=>得到反码=>反码取反得到源码
其实负数在内存里面存在就是补码形式的存在的,你可以直接输出就能看到!
‘叁’ 源代码究竟是什么
源代码就是人类可以看懂的机器文字,程序员在写完代码以后,会将源代码编译为机器代码,可能是一个可执行程序exe啥的,我们平时用的就是这个可执行程序,要想增加功能,或者改善程序,就需要有源代码了,因为人不可能通过0和1编出高级程序。
举个例子:你用Word写好一个文档,生成一个PDF文件,一般来说PDF是不可修改的,你可以把这个PDF发给别人阅读,但是别人要想修改这个PDF就不好操作。而你有这个PDF的原稿(Word文档)你可以很方便的修改然后再生成PDF文档。这里的Word文档就相当于源代码,PDF文档就相当于软件。
简介
代码,没什么可说的,广义的,只要算是程序语言写的都是,c写出来的是代码,编译后,成汇编语言程序,也可以说是代码;再汇编成,机器语言程序,也可以说是代码;不过,算得上代码的,也算是程序,一般都是广义的说法。
说“源”的问题、你用c写出来的,让我看,那是源代码;你把编译成.exe文件的代码,让我直接运行,那就不是源代码、你做的java游戏,如果你把自己写的java代码给我,那是源代码;把处理过的可执行文件给我,那不是源代码。
‘肆’ 汇编语言源代码急求!!!!!!
第一次发的还错了,调试成功的代码。
data segment
S db 'qwertyuiopasdfg','$' ;原字符串
S1 db 15 p (0)
db '$' ;目标字符串db '$'
data ends
assume cs:code,ds:data
code segment
start: mov ax,data ;加载DS
mov ds,ax
mov si,offset S ;字符源地址
mov dx,si ;显示原字符
mov ah,9
int 21h
mov cx,15 ;复制S字符串到S1
mov bx,offset S1
t:
mov al,[si]
mov [bx],al
inc si
inc bx
loop t
mov si,offset S1
mov cx,15 ;计数
ss1:
mov di,si ;di指向si的下一位
inc di
mov dx,1
ss2:
cmp dx,cx ;如果dx大于等于cx跳至s4
jae ss4
mov al,[si]
cmp al,[di] ;比较[si] [di]的值如果大于交换
jbe ss3
xchg al,[di]
mov [si],al
ss3:
inc di ;为下次循环做准备
inc dx
jmp ss2
ss4:
inc si ;指向下一个字符
loop ss1
mov dl,0ah ;显示回车换行
mov ah,2
int 21h
mov dl,0dh
int 21h
mov dx,offset S1 ;显示升序字符串
mov ah,9
int 21h
mov ah,0 ;等待字符输入
int 16h
mov ah,4ch ;结束
int 21h
code ends
end start
‘伍’ 源码的作用及介绍有哪些
源码是指编写的最原始程序的代码。运行的软件是要经过编写的,程序员编写程序的过程中需要他们的语言。以下是由我整理关于什么是源码的内容,希望大家喜欢!
源码的分类
1、计算机里面运行的所有东西都是用程序编出来的(包括操作系统,如Windows,还有Word等,网络游戏也一样),而编写程序要用到计算机语言,用计算机语言直接编出来的程序就叫源码,比如用
VisualBasic编写的源码文件一般为、bas文件,而用C++编写的一般为、cpp文件,源代败旁码不能直接运行,必须编译后才能运行。源码经过编译处理后就可以直接在操作系统下运行了。
2、很多的站长都喜欢使用建网站的程序源码,因为可以很方便的修改,对于任何一个seo人员来说,都是非常好的一个切入点。
3、从字面意义上来讲,源文件是指一个文件,指源代码的集合、源代码则是一组具有特定意义的可以实现特定功能的字符(程序开发代码)。
4、“源代码”在大多数时候等于“源文件”此盯。
比如在这个网页上右键鼠标,选择查看源文件、出来一个记事本,里面的内容就是此网页的源代码、"这句话就体现了他们的关系,此处的源文件是指网页的源文件,而源代码就是源文件的内容,所以又可以称做网页的源代码、、
源代码是指原始代码,可以是任何语言代码。
汇编码是指源代码编译后的代码,通常为二进制文件,比如共享库、可执行文件、、NET中间代码、JAVA中间代码等。
高级语言通常指C/C++、BASIC、C#、JAVA、PASCAL、易语言等等。汇编语言就是ASM,只有这个,比这个更低级的就是机器语言了。
源码的作用
1、生成目标代码,即计算机可以识别的代码。
2、对软件进行说明,即对软件的编写进行说明。为数不少的初学者,甚至少数有经验的程序员都忽视软件说明的编写,因为这部分虽然不会在生成的程序中直接显示,也不参与编译。但是说明对软件的学习、分享、维护和软件复用都有巨大的好处。因此,书写软件说明在业界被认为是能创造优秀程序的良好习惯,一些公司也硬性规定必须书写。
需要指出的是,源代码的修改不能改变已经生成的目标代码。如果需要目标代码做出相应的修改,必须重新编译。
源码的执行效率
虽然我们可以通过不同的语言来实现计算机的同一功能,但在执行效率上则存在不同。普遍规律是:越高级的语言,其执行效率越低。这也是为什么汇编语言生成的文件比用BASIC语言生成文件普遍要小的原因。
源代码就是用汇编语言和高级语言写出来的代码。主要对象是面向开发者;
我们平常使用的应用程序都是经过源码编译打包以后发布的,呈现的最后结果是面向使用者,最终客户的。
源码的程序使用
网站程序一般就是可以用记事本打开的好多行英文的,用编程语言写好的软件
源程序经过编译成目标程序,才能运行。一般目标程序不能再修改了。
我们电脑上安装的软件都是目标程序。源程序不可能直接运行的。
提倡软件开源的人士认为应该提供源程序给用户,让用户自己修改,有利于软件行业的发展森枯和。反对的人觉得这样不利于保护版权。