程序设计练习题及代码

程序设计练习题及代码
程序设计练习题及代码

C语言程序设计基础题

3.1鸡兔同笼一共有40只脚,求鸡兔各有多少只,总共有多少种组合。

#include

main()

{

int i,j,x=0;

for(i=0;i<=10;i++)

{

for(j=0;j<=20;j++)

{

if((4*i+2*j)==40)

{

printf("兔的只数为:%d 鸡的只数:%d\n",i,j);

x++;

}

}

}

Printf("组合数:%d\n",x);

}

3.2换零钱.把一元钱全兑换成硬币(1分2分5分),有多少种兑换方法

#include

main()

{

int one,two,five;

for(one=1;one<=100;one++)

{

for(two=0;two<=50;two++)

{

for(five=0;five<=20;five++)

{

if(one+2*two+5*five==100)

{

printf("一分:%d 二分:%d 五

分:%d\n",one,two,five);

}

}

}

}

}

3.3已知A>B>C>0,A,B,C为整数,且A+B+C<100。求满足1/A2 + 1/B2= 1/C2的A,B,C共有多少组。

#include

main()

{

int A,B,C;

for(A=1;A<100;A++)

{

for(B=1;B<100;B++)

{

for(C=1;C<100;C++)

{

if(((A+B+C)<100)&&((1.0/(A*A))+(1.0/(B*B))==(1.0/(C*C))))

{

printf("A=%d B=%d C=%d\n",A,B,C);

}

}

}

}

}

3.4设abcd*e=dcba,(a非0,e非0非1),求满足条件的整数abcd与e

#include

main()

{

int a,b,c,d,e;

for(a=1;a<9;a++){

for(b=0;b<9;b++){

for(c=0;c<9;c++){

for(d=0;d<9;d++){

for(e=2;e<9;e++){

if(((a*1000+b*100+c*10+d))*e==(d*1000+c*100+b*10+a)){

printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);

}

}

}

}

}

}

}

3.5因子之和等于它本身的数为完数。如:28的因子是1,2,4,7,14,且1+2+4+7+14=28,则28为完数。求[2,1000]中的完数。

#include

main()

{

int i,j,x;

for(i=2;i<=1000;i++)

{

x=0;

for(j=1;j

{

if(i%j==0)

{

x=x+j;

}

}

if(x==i)

{

printf("%d\n",i);

}

}

}

3.6将一个整数分解为1、质因子或本身之积。如5=1*5,8=1*2*2*2

#include

main()

{

int x,i=2,j;

scanf("%d",&x);

printf("%d=1",x);

while(x!=1)

{

if(x%i==0)

{

printf("*%d",i);

x=x/i;

}

else

{

i++;

}

}

}

3.7求1000以内亲密数对。亲密数对的定义是:若正整数a的所有因子之和为b,b的所有因子之和为a,且a!=b,则称ab互为亲密数对。

如:220的因子之和1+2+4+…+110=284

284的因子之和1+2+…+142=220

#include

main()

{

int i,j,k;

int x,y,n,m;

int a[100],b[100];

for(i=7;i<1000;i++)

{

x=0,y=0,n=0,m=0;

for(j=2;j

{

if(i%j==0)

{

a[n++]=j;

x=x+j;

}

}

for(j=2;j

{

if(x%j==0)

{

b[m++]=j;

y=y+j;

}

}

if(y==i&&i

{

printf("%d的因子之和为:1",i);

for(k=0;k

{

printf("+%d",a[k]);

}

printf("=%d\n",x);

printf("%d的因子之和为:1",x);

for(k=0;k

{

printf("+%d",b[k]);

}

printf("=%d\n\n\n",y);

}

}

}

3.8用二分法求方程在(-10,10)之间的根. 2x3-4x2+3x-6=0 #include

#include

main()

{

double x1=-10,x2=10,middle;

double y1,y2,ym;

while((x2-x1)>=0.00001)

{

middle=(x1+x2)/2;

y1=2*pow(x1,3)-4*pow(x1,2)+3*x1-6;

y2=2*pow(x2,3)-4*pow(x2,2)+3*x2-6;

ym=2*pow(middle,3)-4*pow(middle,2)+3*middle-6;

if((y1/ym)>0)

{

x1=middle;

}

else

x2=middle;

}

printf("%lf\n",(x1+x2)/2);

}

3.9一个球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下.求它在第10次落地后,共经过多少米?第10次反弹多高?

#include

main()

{

double H=100,high=0,x=0;

int i;

for(i=1;i<=10;i++)

{

x=x+H+high;

H=H/2;

high=H;

}

printf("共经过多少米:%f米\n第10次反弹多高度:%f米\n",x,H);

}

3.10猴子吃桃子.猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天将剩下的桃子吃掉一半,又多吃了一个.以后每天都吃了前一天剩下的一半零一个.到第十天再想吃时,发现只剩下一个桃子.求第一天共摘多少桃子?

#include

main()

{

int num=1,i;

for(i=10;i>1;i--)

{

num=(num+1)*2;

}

printf("第一天共摘%d个桃子\n",num);

}

3.11打印形状为直角三角形的九九乘法表

#include

main()

{

int i,j,x;

for(i=1;i<10;i++)

{

for(j=1;j<=i;j++)

{

x=j*i;

printf("%d*%d=%2d ",j,i,x);

}

printf("\n");

}

}

3.12求s

=a+aa+aaa+……+aa...a之值(n个a),其中a是一个一位整数.

n

如:2+22+222+2222+22222+......

#include

void main()

{

int Sn=0,s=0,a,n;

int i;

printf("请输入a,n:\n");

scanf("%d",&a);

scanf("%d",&n);

for(i=0;i

{

s=s+a;

Sn=Sn+s;

s=s*10;

}

printf("Sn=%d\n",Sn);

}

3.13利用循环,打印除如下图案。

ab

abc

abcd

{

char a[6]={'a','b','c','d','e','f'};

int i,j,x=0;

int n=sizeof(a)/sizeof(a[0]);

printf("n=%d",n);

printf("模式一:\n");

for(i=0;i<6;i++)

{

for(j=0;j<=i;j++)

{

printf("%c",a[j]);

}

printf("\n");

}

printf("模式二:\n");

for(i=0;i<3;i++)

{

for(j=0;j<2-i;j++)

{

printf("");

}

for(j=0;j

{

printf("%c",a[x]);

x++;

}

printf("\n");

}

printf("模式三:\n");

x=0;

for(i=0;i<3;i++)

{

for(j=0;j<2-i;j++)

{

printf("");

}

for(j=0;j

{

printf("%c ",a[x]);

x++;

}

printf("\n");

}

}

4.1用函数(传值和传址两种方式)实现2.2,2.3, 2.5,2.6, 2.9,2.10.

2.2

#include

int Sum(int n)

{

int s=0,i;

for(i=1;i<=n;i++)

{

s=s+i;

}

return s;

}

void main()

{

int n,s;

scanf("%d",&n);

s=Sum(n);

printf("前n项和为:%d\n",s);

}

2.3

#include

int Sum(int n)

{

int s=0,i,j=1,k=1;

for(i=1;i<=n;i++)

{

s=s+j*k;

k=(-1)*k;

j=j+2;

}

return s;

}

void main()

{

int n=100,s;

s=Sum(n);

printf("前100项和为:%d\n",s); }

2.5

#include

long Sum(int n)

{

int i;

long s=1;

for(i=1;i<=n;i++)

{

s=s*i;

}

return s;

}

void main()

{

int n;

long s=1;

scanf("%d",&n);

printf("n=%d\n",n);

s=Sum(n);

printf("n!:%ld\n",s);

}

2.6

#include

long Sum(int n)

{

int i;

long S=0,s=1;

for(i=1;i<=n;i++)

{

s=s*i;

S=S+s;

}

return S;

}

void main()

{

int n;

long s=1;

scanf("%d",&n);

printf("n=%d\n",n);

s=Sum(n);

printf("和为:%ld\n",s);

}

2.9

#include

int Prime(int n)

{

int i,k=1;

for(i=2;i

{

if(n%i==0)

{

k=0;

break;

}

}

return(k?1:0);

}

void main()

{

int n,k;

scanf("%d",&n);

k=Prime(n);

if(k==0)

{

printf("%d不是素数!\n",n);

}

else

{

printf("%d是素数!\n",n);

}

}

2.10

#include

#include

void Primescope(int n,int m)

{

int i,j,k;

for(i=n;i<=m;i++)

{

k=0;

for(j=2;j

{

if(i%j==0)

{

k=0;

break;

}

else k=1;

}

if(k==1)

{

printf("%d\n",j);

}

}

}

void main()

{

int n,m;

printf("请输入想要的素数范围:\n");

scanf("%d",&n);

scanf("%d",&m);

printf("%d到%d范围内的素数为:\n",n,m);

if(n>=m)

{

printf("输入错误!\n");

exit(0);

}

Primescope(n,m);

}

5.1输入一个字符串,求字母,数字其它字符的个数.

#include

int Num(char *p)

{

int num=0,word=0,other=0;

while(*p!='\0')

{

if('a'<=*p&&*p<='z'||'A'<=*p&&*p<='Z')

{

num++;

}

else if ('0'<=*p&&*p<='9')

{

word++;

}

else other++;

p++;

}

printf("字母个数:%d\n",word);

printf("数字个数:%d\n",num);

printf("其他字符个数:%d\n",other);

return num;

}

void main()

{

char a[50];

char *p=a;

gets(a);

Num(p);

}

5.2输入一个十六进制数,转换成十进制输出.

#include

#include

int Transform(char a[])

{

int i,j,n=0;

char *p=a;

int x,X=0;

while(*p!='\0')

{

p++;

n++;

}

p--;

for(i=0;i

{

x=(int)*(p--);

if(x>57)

{

switch(x)

{

case 65:x=10;break;

case 66:x=11;break;

case 67:x=12;break;

case 68:x=13;break;

case 69:x=14;break;

case 70:x=15;break;

default :printf("输入错误!"),exit(0);

}

}

else

{

x=x-48;

}

for(j=1;j<=i;j++)

{

x=x*16;

}

X=X+x;

}

return X;

}

void main()

{

char a[20];

int X;

printf("请输入十六进制数(大写表示):\n");

scanf("%s",a);

X=Transform(a);

printf("转换后:%d\n",X);

}

5.3求Fibonacci数列的前20项.a

1=1,a

2

=1,a

3

=a

1

+a

2

,..., a

n

=a

n-1

+a

n-2

#include

void Fibonacci()

{

int a1=1,a2=1,i,t;

printf("%d\n",a1);

printf("%d\n",a2);

for(i=3;i<=20;i++)

{

t=a2;

a2=a1+a2;

a1=t;

printf("%d\n",a2);

}

}

int main()

{

int n;

Fibonacci();

}

5.4将一个整型数组中的元素逆置. #include

void Swap(int a[],int n)

{

int i,t;

printf("\n逆置前:\n\t");

for(i=0;i

{

printf("%d ",a[i]);

}

for(i=0;i<(n/2);i++)

{

t=a[n-i-1];

a[n-i-1]=a[i];

a[i]=t;

printf("\n逆置后:\n\t");

for(i=0;i

{

printf("%d ",a[i]);

}

printf("\n");

}

void main()

{

int a[]={1,2,3,4,5,6,7,8,9};

int n=sizeof(a)/sizeof(a[0]);

Swap(a,n);

}

5.5求一个数组中最大、最小元素的值以及下标. #include

void Find(int a[],int n)

{

int i,max=0,min=0;

for(i=0;i

{

if(a[i]>a[max])

{

max=i;

}

if(a[i]

{

min=i;

}

}

printf("最大值%d 下标:%d\n",a[max],max);

printf("最小值%d 下标:%d\n",a[min],min); }

void main()

{

int a[]={7,5,3,9,2,1,6,4,8};

int n=sizeof(a)/sizeof(a[0]);

Find(a,n);

}

5.6求一个数组中的最大、次大元素的值以及下标. #include

void Find(int a[],int n)

{

int i,max=0,secondly=0;

for(i=0;i

{

secondly=i;

if(a[i]>a[max])

{

max=i;

}

}

printf("最大值%d 下标:%d\n",a[max],max);

printf("次大值%d 下标:%d\n",a[secondly],secondly);

}

void main()

{

int a[]={7,5,3,9,2,1,6,4,8};

int n=sizeof(a)/sizeof(a[0]);

Find(a,n);

}

5.7已知一个数组中的元素按非递减有序排列,现要向其中插入一个元素,要求数组仍然有序.

#include

void Insert(int a[],int x,int n)

{

int i;

a[n+1]=x;

for(i=8;i>=0&&x

{

a[i+1]=a[i];

}

a[i+1]=x;

}

void main()

{

int a[10]={1,3,4,5,7,9,11,13,17};

int i,n,x;

n=sizeof(a)/sizeof(a[0]);

printf("请输入要插入的元素:");

scanf("%d",&x);

Insert(a,x,8);

printf("\n");

for(i=0;i

{

printf("%d\n",a[i]);

}

}

5.8将一个整型数组中重复的元素删除,并计算剩下元素的个数。

#include

void Wipe(int a[],int n)

{

int i,j,k,t;

for(i=0;i

{

t=a[i];

for(j=i+1;j

{

if(a[j]==t)

{

for(k=j;k

{

a[k]=a[k+1];

}

n--;

}

else j++;

}

}

for(i=0;i

{

printf("%d\n",a[i]);

}

printf("剩下元素的个数为:%d\n",n);

}

void main()

{

int a[9];

int i;

for(i=0;i<9;i++)

{

scanf("%d",&a[i]);

}

Wipe(a,9);

}

5.9将两个按值非递减排列的整型数组合并为一个非递减排列的数组,且值相等的元素只保留一个(即结果数组中没有重复的元素)。

#include

void Combine(int a[],int n,int b[],int m,int c[]);//合并模块

void Insert(int a[],int n);//插入排序法

int Wipe(int a[],int n);//去除数组中重复元素

void Combine(int a[],int n,int b[],int m,int c[])

{

int i,j=0,num;

for(i=0;i

{

if(i<9)

{

c[i]=a[i];

}

else

{

c[i]=b[j];

j++;

}

}

Insert(c,n+m);//排序c(插入排非递减排列)

num=Wipe(c,n+m);//去除c中重复元素

printf("\n数组c:\n");

for(i=0;i

{

printf("%d ",c[i]);

}

printf("\n");

}

void Insert(int a[],int n)//插入排序法

{

int i,j,t;

for(i=1;i

{

t=a[i];

for(j=i-1;j>=0&&t

{

a[j+1]=a[j];

}

a[j+1]=t;

}

}

int Wipe(int a[],int n)

{

int i,j,k,t;

for(i=0;i

{

t=a[i];

for(j=i+1;j

{

if(a[j]==t)

{

for(k=j;k

{

a[k]=a[k+1];

}

n--;

}

else j++;

}

}

return n;

}

void main()

{

int a[9],b[9],c[18];

int i;

printf("请输入数组a:");

for(i=0;i<9;i++)

{

scanf("%d",&a[i]);

}

printf("请输入数组b:");

for(i=0;i<9;i++)

{

scanf("%d",&b[i]);

}

printf("数组a:\n");

for(i=0;i<9;i++)

{

printf("%d ",a[i]);

}

printf("\n数组b:\n");

for(i=0;i<9;i++)

{

printf("%d ",b[i]);

}

Combine(a,9,b,9,c);

}

5.10将两个按值非递减排列的整型数组合并为一个非递减排列的数组(即求并集)。

#include

void Combine(int a[],int n,int b[],int m,int c[]);//合并模块

void Insert(int a[],int n);//插入排序法

void Combine(int a[],int n,int b[],int m,int c[])

{

int i,j=0;

for(i=0;i

{

if(i<9)

{

c[i]=a[i];

}

else

{

c[i]=b[j];

j++;

}

}

Insert(c,n+m);//排序c(插入排非递减排列)

printf("\n数组c:\n");

for(i=0;i

{

printf("%d ",c[i]);

}

printf("\n");

}

void Insert(int a[],int n)//插入排序法

{

int i,j,t;

for(i=1;i

{

t=a[i];

for(j=i-1;j>=0&&t

{

a[j+1]=a[j];

}

a[j+1]=t;

}

}

void main()

{

int a[9],b[9],c[18];

int i;

printf("请输入数组a:");

for(i=0;i<9;i++)

{

scanf("%d",&a[i]);

}

printf("请输入数组b:");

for(i=0;i<9;i++)

{

scanf("%d",&b[i]);

}

printf("数组a:\n");

for(i=0;i<9;i++)

{

printf("%d ",a[i]);

}

printf("\n数组b:\n");

for(i=0;i<9;i++)

{

pri ntf("%d ",b[i]);

}

Combine(a,9,b,9,c);

}

5.11用筛选法求100以内的素数.

#include

#include

void main()

{

int i,j,k,n=0;

for(i=2;i<=100;i++)

{

k=1;

for(j=2;j

{

if(i%j==0)

{

k=0;

}

}

if(k==1)

{

printf("%d ",i);

n++;

if(n%5==0) printf("\n");

}

}

printf("\n");

}

5.12用选择法对含有10个整数的数组排序. #include

void Select(int a[],int n)

{

int i,j,k,t;

for(i=0;i

{

k=i;

for(j=i+1;j

{

if(a[j]

{

k=j;

}

}

if(k!=i)

{

t=a[i];

a[i]=a[k];

a[k]=t;

}

}

}

void main()

{

int a[9]={1,5,9,7,3,6,2,8,4};

int i;

printf("排序前:\n");

for(i=0;i<9;i++)

{

printf("%d ",a[i]);

}

printf("\n");

Select(a,9);

printf("排序后:\n");

for(i=0;i<9;i++)

{

printf("%d ",a[i]);

}

printf("\n");

}

5.13求n*n的矩阵中两条对角线上的元素之和. #include

#define N 3

void main()

{

int a[N][N];

int i,j,s=0;

printf("请输入矩阵:\n\n");

for(i=0;i

{

for(j=0;j

{

scanf("%d",&a[i][j]);

}

}

for(i=0;i

{

for(j=0;j

{

if(i==j)

{

s=s+a[i][j];

}

if(((i+j)==N-1)&&(i!=j))

{

s=s+a[i][j];

C语言程序设计 入门源代码代码集合

#include <> void print_star(void) { printf("*****************\n"); } void print_welcome(void) { printf("C language,welcome!\n"); } void main() { print_star(); print_welcome(); print_star(); getchar(); } 演示2 #include "" int sum(int i,int j) { return(i + j); } void main() { int n1,n2; printf("input 2 numbers:\n"); scanf("%d%d",&n1,&n2); printf("the sum = %d\n",sum(n1,n2)); getchar(); } 演示3 #include "" int maxnum(int,int,int); main() { int a,b,c; printf("Please enter 3 numbers:\n"); scanf("%d,%d,%d",&a,&b,&c); printf("Maxnum is %d\n",maxnum(a,b,c));

} int maxnum(int x,int y,int z) { int max=x; if(y>max) max = y; if(z>max) max = z; return max; } 演示4 #include <> int s1(int n) { int j,s; s=0; for(j=1;j<=n;j++) s=s+j; return s; } int sum(int n) { int i,s=0; for(i=1;i<=n;i++) s=s+s1(i); return s; } void main() { int n; printf("n:"); scanf("%d",&n); printf("s=%d\n",sum(n)); } 演示5

简易数字连连看Java程序的设计书

简易数字连连看Java程 序设计书 1.1Java程序课程设计任务书 1.1《简易连连看游戏》 本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。 1.1.1具体要求(包括技术要求等): <1>. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。方块上随机分布一些数字,数字的要至少两两相同,位置随机打乱。 <2>. 当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。 <3>. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。 <4>. 退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。 1.2本系统涉及的知识点: 循环,javaGUI组件,函数,数组,分支等 2.功能设计 2.1算法设计 本系统需要实现的功能要求:

图一,数字按钮功能模块 图二,三个功能按钮模块 图三,数据记录模块

图四,鼠标操作模块 2.2部分模块流程图:

3代码设计 package mybase.programe; /* * lianliankan总体算法思路:由两个确定的按钮。若这两个按钮的数字相等,就开始找它们相连的路经。这个找路经 * 分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有 * 三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)

连连看-JAVA课程设计报告

课程设计 2013 ~ 2014学年第二学期 设计题目连连看游戏程序 院(系) 专业软件工程 班级学号 学生姓名 设计时间 2014年6月24日~2014年6月27日 指导教师 提交日期 2014年6月27日

目录 目录 (2) 1.课程设计的目的与要求 (3) 1.1课程设计目的与要求 (3) 1.2课程设计内容 (3) 1.3课程设计的实验环境 (3) 1.4课程设计的预备知识 (3) 2.系统模块结构图 (4) 2.1 模块设计 (4) 2.1.1 菜单控制模块 (4) 2.1.2 算法模块 (5) 2.1.3 界面显示模块 (7) 3.详细设计 (9) 3.1总体算法思路 (9) 3.2代码实现 (9) 4.小结 (9)

1.课程设计的目的与要求 1.1课程设计目的与要求 1.掌握JA V A语言中面向对象的概念,并能在程序中熟练运用。 2.了解面向对象程序设计(JA V A)的基本概念以及运用面向对象技术进行程序设计的基本思 想。 3.能正确编写和调试JA V A程序。 4.了解在JA V A环境下进行程序设计的基本思想和方法。 1.2课程设计内容 1.设计一个连连看的游戏程序。 2.在JA V A环境下,将上述程序使用GUI、数据结构等内容完成 3.设计思路: (1)界面设计 1)初始测试界面可以考虑使用简单的按钮来代表连连看游戏中的图标。 2)布局可以考虑使用GRID方式。 3)设计菜单选择连连看难度等内容,具体可参照QQ连连看,也可自定义。 4)考虑完善界面,例如动画等。 (2)代码设计 1)本设计的核心为练练看算法的设计,可以考虑数据结构中的图的遍历章 节,合理设计算法,将界面中各按钮的分布映射入数学矩阵进行路径规划。 (可以上网搜索相关算法)。 2)完成连连看游戏的图形、算法等代码的设计。 4.实验步骤(包括操作方法、数据处理) (1)界面设计 (2)算法设计 (3)代码设计 1.3课程设计的实验环境 硬件要求能运行Windows xp/7操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境, ECLIPSE开发工具。 1.4课程设计的预备知识 熟悉JAVA语言及ECLIPSE开发工具。

世界八强连连看代码m1

# 第6周小项目"世界杯8强连连看"的程序模板 # “世界杯8强连连看”游戏 importsimpleguitk as gui import random # 定义全局变量 all_image = [] # 所有16张图片的索引下标,两两重复 exposed = [] # 真表示对应的图片已经翻开 check_list = [] # 正在对比的两种图片 turns = 0 flag_image = [] # 16强球队的国旗图标 # 初始化全局变量的辅助函数 defnew_game(): global turns, all_image, exposed, check_list, flag_image,back_image turns = 0 all_image = [] exposed = [] check_list = [] list1 = range(8) list2 = range(8) all_image.extend(list1) all_image.extend(list2) #此处填写代码,利用shuffle打乱所有图片,使其随机出现,填写代码后删除pass random.shuffle(all_image) for card in all_image: exposed.append(False) label.set_text("回合次数= 0") background_sound.rewind() background_sound.play() #此处填写代码,初始化exposed列表,初始值设置为False #此处填写代码,设置回合次数为0 #此处填写代码,设置背景音乐,利用rewind和play方法播放背景音乐 # 鼠标点击事件的处理函数 defmouseclick(pos):

C++程序设计源代码大全

S2_1 #include using namespace std; void main() { float a,b,c; cout<<"input a b c\n"; cin>>a>>b>>c; if((a+b using namespace std; void main() { int year; cout<<"Input year: "; cin>>year; if((year%4==0&&year%100!=0)||(year% 400==0)) cout< using namespace std; void main() { float a1, a2; char oper; float result; int flag=0; cout<<"请输入简单的运算式:\n"; cin>>a1>>oper>>a2; switch(oper) { case'+': result=a1+a2; break; case'-': result=a1-a2; break; case'*': result=a1*a2; break; default: cout<<"输入错误的运算符!\n"; flag=1; } if(flag==0) cout< #include using namespace std; void main() { float a,b,c,x1,x2; cout<<"请输入方程的3个系数a b c \n"; cin>>a>>b>>c; x1=(-b+sqrt(b*b-4*a*c))/2*a; x2=(-b-sqrt(b*b-4*a*c))/2*a; if(b*b-4*a*c<0) cout<<"无实根!\n"; else cout<<"x1="<

连连看C++程序设计

源程序代码 //main.cpp #include using namespace std; #include #include #include"class.h" void main() { GridInfor g; initgraph(M,N); mciSendString("play game_begin.mp3 repeat", NULL, 0, NULL); g.InitFace(); while(1) { mouse = GetMouseMsg(); switch(mouse.uMsg) { case WM_MOUSEMOVE: g.Mousemove(mouse.x,mouse.y); break; case WM_LBUTTONDOWN: if(Single_click_judge(mouse.x,mouse.y)) { g.Leftbottondown(mouse); } break; default: break; } } closegraph(); } void GridInfor::RandGrid() //产生图片的标记{ for(int iCount = 0, x = 1; x <= ROW; ++x ) { for( int y = 1; y <= COL; ++y ) { ::GridID[x][y] = iCount++ % GridNum + 1; } } } void GridInfor::Shuffle( ) //打乱棋盘

int ix, iy, jx, jy, grid; for( int k = 0; k < 84; ++k ) { ix = rand() % ROW + 1; // 产生1 - COL 的随机数 iy = rand() % COL + 1; // 产生1 - ROW 的随机数 jx = rand() % ROW + 1; // 产生1 - COL 的随机数 jy = rand() % COL + 1; // 产生1 - ROW 的随机数 if( ::GridID[ix][iy] != ::GridID[jx][jy] ) //如果不相等就交换数据 { grid = ::GridID[ix][iy]; ::GridID[ix][iy] = ::GridID[jx][jy]; ::GridID[jx][jy] = grid; } } } ////////////////////////////////初始化界面/////////////////////////////////////// void GridInfor::InitFace() { srand((unsigned)time(NULL)); a.Load_picture(); a.RandGrid(); IMAGE image3; loadimage(&image3,"res\\bg.bmp"); putimage(0,0,&image3); getimage(&image2,3 * 42,2 * 48,42, 48); a.Shuffle(); a.ShowGrid(); } void GridInfor::Load_picture() //加载图片{ IMAGE image1,background; loadimage(&image1,"IMAGE","grids"); SetWorkingImage(&image1); for(int i = 1 ;i < GridNum + 1 ;i ++) for(int j = 0;j < 2;j++) getimage(&image[i][j],j * 42,i * 48,42, 48); loadimage(&background,"IMAGE","bg"); SetWorkingImage(&background); getimage(&image2,3 * 42,2 * 48,42, 48); SetWorkingImage(); putimage(0,0,&background); }

进程调度程序设计报告(源代码)资料

课程设计报告 题 目 进程调度程序设计 课 程 名 称 操作系统课程设计 院 部 名 称 计算机工程学院 专 业 计算机科学与技术 班 级 13计算机科学与技术(单)(1) 学 生 姓 名 周敏健 学 号 1305201013 课程设计地点 A104 课程设计学时 20学时 指 导 教 师 何 健 金陵科技学院教务处制 成绩

目录 摘要 (3) 一、课程设计的目的和要求 (4) 二、系统需求分析 (4) 三、总体设计 (5) 四、详细设计 (6) 五、测试、调试过程 (9) 六、结论与体会 (11) 七、参考文献 (12) 附录:源程序 (12)

课程设计课题 进程调度程序设计 摘要 在多道系统中,对批处理作业需要进行作业调度。作业调度是在资源满足的条件下,将处于就绪状态的作业调入内存,同时生成与作业相对应的进程,并未这些进程提供所需要的资源。进程调度需要根据进程控制块(PCB)中的信息,检查系统是否满足进程的资源需求。只有在满足进程的资源需求的情况下,系统才能进行进程调度。下面是几种常见的作业调度算法:先来先服务(FCFS)、优先算法、轮换算法、短作业优先算法以及最高响应比优先法等,本文将对前两种算法进行详细的介绍。 关键词:进程调度,优先级,FCFS,PCB,作业,资源

一、课程设计的目的和要求 1、目的 进程调度是处理机管理的核心内容。本设计要求用C语言编写和调试一个简单的进程调度程序。通过设计本可以加深理解有关进程控制块、进程队列的概念,并体会和了解最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法的具体实施办法。 2、要求 1)进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。 2)每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 3)进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。 4)每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 5)就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后把它插入就绪队列等待CPU。 6)每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。 7)重复以上过程,直到所要进程都完成为止。 二、系统需求分析 编写一个模拟进程调度的程序,将每个进程抽象成一个进程控制块PCB,PCB 用一个结构体描述。 采用两种不同的调度算法来实现功能,主要有如下几大功能模块组成。 (1)创建优先数PCB模块

JAVA实验报告3-“连连看”游戏程序设计

目录 一、实验目的与要求 (2) 二、实验方案 (2) 三、实验结果和数据处理 (3) 四、结论 (20) 五、问题与讨论 (20)

一、实验目的与要求 (1)实验目的:通过在指定的窗口界面完成“连连看”小游戏程序的编写和调试,加深对面向对象程序设计的理解。 (2)实验要求:按照Java程序设计教程的要求完成第三章中“连连看”游戏程序的编写和调试。 二、实验方案 定义了一个lianliankan类,实现了接口ActionListener: ①main()方法:主函数; ②actionPerformed()方法,用来实现重来一局按钮的响应事件; ③go()方法:初始化界面,排列图形; ④ex()方法:设置“退出游戏”窗体界面; ⑤suiji()方法:产生随机数,来填充游戏界面对应的数组的各个位置; ⑥chonglie()方法:当无符合条件的图形可消去时,需要重新排列图形; ⑦ling()方法:将数组中为零的成员所对应的按钮消去(设为不可见); ⑧wei()方法:判断并记录每次单击按钮的一些信息; ⑨xiao()方法:判断两个按钮在对应数组元素的值相同时能不能消去。

三、实验结果和数据处理 整个游戏最重要的方法,xiao()方法,用来判断两个按钮在对应数组元素的值相同时能不能消去: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implements ActionListener { JFrame mainFrame; //主面板 Container thisContainer; JPanel centerPanel,southPanel,northPanel; //子面板 JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组 JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮JLabel fractionLable=new JLabel("0"); //分数标签 JButton firstButton,secondButton; //分别记录两次被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; //判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateL V; //游戏按钮的位置坐标 int i,j,k,n;//消除方法控制 public void init(){ mainFrame=new JFrame("JKJ连连看"); thisContainer = mainFrame.getContentPane();

C语言程序设计报告(菜单+源码+测试)

一:系统功能 基本功能: 图书的录入,删除,查找,和导入导出等。 图书属性: 书号,书名,第一作者,版次,出版年等。 菜单功能: 1.Input Records(输入若干条记录) 从键盘一次输入一本书的信息,存放到结构体数组中,然后显示。 提示信息,确认是否输入下一条记录。 2.Display All Records(显示所有记录) 按顺序显示所有记录,每屏显示10条记录,按键继续显示下一屏。 3.Delete a Record(按书名查找,删除一本书) 输入待删除书的书名,显示该书名的所有书目,提示输入待删除书目的书号,提示是否删除,确认后,删除该书。 4.Sort(排序) 以书名为升序排列数组5.Insert a record(插入一条记录) 以书名为序排列的数组中插入一条记录,插入后,数组仍然有序。 输出插入成功后的信息。 6.Query(查找并显示一个记录) 输入书名,查找并显示包含该书名的所有图书信息 7.Add Records from a Text File(从文件读入图书信息到结构体数 组中) 用户可事先建立一个文本文件Dictory.txt。存放所有图书信息,文件格式如下: 2 1182 高等数学刘浩荣 5 同济大学出版社 2013 7300 物理化学王德明 2 化学工业出版社 2015 8.Write to a Text File 将数组中的全部记录写入文件Records.txt中,要求格式与Dictory.txt相同。 0.Quit(退出图书管理系统) 新增加菜单功能: 9.Change a record

修改某一条记录的值 a. Menu 显示菜单 b. Clear Screen 清屏 c. Pause 按暂停,按任意键继续 二:数据结构 Typedef struct { char ISBN[10];//书号 char book[30];//书名 char author[20];//作者 Int edition;//版本号 char press[50];//出版社名 int year;//出版年 }Bookinfo; 三:函数调用关系

基于java的连连看游戏设计毕业设计论文(含源文件)

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

C语言程序设计连连看

#include #include <> #include <> #include <> #include using namespace std; #include int mai() // 倒计时 { for (int i=3; i>=0; i--) { long t = time(NULL); for(;;) { long n = time(NULL); if(n != t) break; } system("cls"); cout<<" "< << " ** 秒

"<>d; *** cout<<" "<

java(源代码)连连看课程设计

目录 第一章引言 (2) 1.背景 (2) 1.1课程设计内容 (3) 第二章系统介绍 (4) 1.连连看游戏规则 (4) 1.1游戏基本规则 (4) 1.2操作规则 (4) 1.3胜利和失败 (4) 2.游戏流程图分析 (4) 第三章系统游戏设计 (7) 1.系统分析 (7) 1.1游戏系统需求分析 (7) 1.2系统开发及运行环境 (7) 1.3系统功能主要要求 (7) 2.系统总体结构 (8) 3. 系统各模块功能介绍 (8) 第四章系统的具体实现 (9) 1.系统主要运行界面 (9) 1.1运行界面 (9) 1.2执行界面,进入游戏正常运行 (9) 1.3时间到界面 (10) 1.4赢家界面 (11) 1.5进度条界面 (12) 图4.5程序运行进度条 (12) 2.游戏实现代码 (12) 2.1主面板内所需要的组件的声明 (12) 2.2填充一个矩形框,进行显示时间 (12) 2.3主面板及各组件初始化 (13) 2.4创建时间对象,每隔100毫秒刷新一次 (13) 2.5分数代码。 (13) 3.消除图片具体情况 (14) 3.1两次点击相同图片相邻 (14)

3.2水平方向消去算法 (14) 3.3竖直方向消去算法 (15) 第五章程序清单 (16) 第六章结束语 (24) 第七章参考文献 (25) 第一章引言 1.背景 游戏“连连看”顾名思义就是找出相关联的东西,这个连连看在网上基本是用在小游戏中,就是找出相同的两样东西,在一定的规则之内可以做为相关联处理。“连连看”的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。 游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。这其中,顾方编写的“阿达连连看”以其精良的制作广受好评,这也成为顾方“阿达系列软件”的核心产品。并于2004年,取得了国家版权局的计算机软件著作权登记证书。 随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。如“水晶连连看”、“果蔬连连看”等,流行的“水晶连连看”以华丽界面吸引了一大批的女性玩家。 2008年,随着社交网络的普及和开放平台的兴起,“连连看”被引入了社交网络。“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行。 网络小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型。 不管走到哪个网页游戏网站,连连看游戏总是排在受玩家欢迎排名的前5位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络、单机休闲小游戏。 游戏《连连看》,只要将相同的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,适合细心的玩家。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。 该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。图片全部消完为游戏成功。游戏还将设置退出,再来一局的按钮,并实现该功能,方便用户进行操作。

单片机编程源代码

前言 本文是本人上课的一个补充,完全自写,难免有错,请读者给予指正,可发邮件到ZYZ@https://www.360docs.net/doc/5d5104310.html,,或郑郁正@中国;以便相互学习。结合课堂的内容,课堂上的部分口述内容,没有写下来;有些具体内容与课堂不相同,但方法是相通的。 针对当前的学生情况,尽可能考虑到学生水平的两端,希望通过本文都学会单片机应用。如果有不懂的内容,不管是不是本课的内容,都可以提出来,这些知识往往代表一大部分同学的情况,但本人通常认为大家对这些知识已精通,而在本文中没有给予描述,由此影响大家的学习。对于这些提出问题的读者,本人在此深表谢意。 想深入详细学习单片机的同学,可以参考其它有关单片机的书籍和资料,尤其是外文资料。如果有什么问题,我们可以相互探讨和研究,共同学习。 本文根据教学的情况,随时进行修改和完善,所以欢迎同学随时注意本文档在课件中的更新情况。 基础知识:单片机编程基础 单片机的外部结构: 1、DIP40双列直插; 2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3、电源VCC(PIN40)和地线GND(PIN20); 4、高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5、内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6、程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7、P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1、四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2、两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3、一个串行通信接口;(SCON,SBUF) 4、一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。教科书的160页给出了针对MCS51系列单片机的C语言扩展变量类型。 C语言编程基础: 1、十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2、如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3、++var表示对变量var先增一;var—表示对变量后减一。 4、x |= 0x0f;表示为 x = x | 0x0f; 5、TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6、While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚)

LabVIEW连连看课程设计报告

成绩评定表

课程设计任务书

目录 1目的及基本要求 (1) 2 连连看设计原理 (2) 3连连看设计和仿真 (2) 3.1 主程序设计 (2) 3.2 子程序详细设计 (3) 3.3 设计中遇到的问题 (10) 4 结果及性能分析 (11) 4.1 运行结果 (11) 4.2 性能分析 (11) 参考文献 (12)

1目的及基本要求 虚拟仪器技术就是利用高性能的模块化硬件,结合高效灵活的软件来完成各种测试、测量和自动化的应用。灵活高效的软件能帮助您创建完全自定义的用户界面,模块化的硬件能方便地提供全方位的系统集成,标准的软硬件平台能满足对同步和定时应用的需求。这也正是NI近30年来始终引领测试测量行业发展趋势的原因所在。只有同时拥有高效的软件、模块化I/O硬件和用于集成的软硬件平台这三大组成部分,才能充分发挥虚拟仪器技术性能高、扩展性强、开发时间少,以及出色的集成这四大优势。LabVIEW(Laboratory Virtual Instrument Engineering Workbench,实验室虚拟仪器集成环境)是一种图形化的编程语言(又称G语言),它是由美国NI公司推出的虚拟仪器开发平台,也是目前应用最广、发展最快、功能最强的图形化软件集成开发环境。使用这种语言编程时,基本上不用写程序代码,取而代之的是程序框图。 虚拟仪器(VI) 的概念虚拟仪器[1](virtual instrument)是基于计算机的仪器。计算机和仪器的密切结合是目前仪器发展的一个重要方向。粗略地说这种结合有两种方式,一种是将计算机装入仪器,其典型的例子就是所谓智能化的仪器。随着计算机功能的日益强大以及其体积的日趋缩小,这类仪器功能也越来越强大,目前已经出现含嵌入式系统的仪器。另一种方式是将仪器装入计算机。以通用的计算机硬件及操作系统为依托,实现各种仪器功能。虚拟仪器主要是指这种方式。上面的框图反映了常见的虚拟仪器方案。尽可能采用了通用的硬件,各种仪器的差异主要是软件。同时可充分发挥计算机的能力,有强大的数据处理功能,可以创造出功能更强的仪器。 熟悉LabVIEW开发环境,掌握基于LabVIEW的虚拟仪器原理、设计方法和实现技巧,运用专业课程中的基本理论和实践知识,采用LabVIEW开发工具,实现电子时钟的设计和仿真。要求通过本课程设计使学生熟悉LabVIEW开发环境,掌握基于LabVIEW的虚拟仪器设计原理、设计方法和实现技巧,使学生掌握通信系统设计和仿真工具,为毕业设计做准备,为将来的学习及今后从事科学研究、工程技术工作打下较坚实的基础。

连连看源代码

摘要: 近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点, 得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编 程领域的首选编程语言。 Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展 所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期 内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应 用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java 自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中 了. 连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进 行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成 为办公一族的新宠,并迅速传遍了世界各地。饱受工作压力的人们没有太多的时间进行 复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。之后村子的连连看风靡版, 阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就 了一个连连看的新世界。连连看游戏有多种地图样式和道具系统、大大加强了游戏的可 玩性,是一款老少皆宜的休闲佳品。 关键字:发展,java,连连看,程序设计; 1.课程设计介绍 课题设计的目的: 1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。 2) 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼 我们的分析解决;实际问题的能力,提高学生适应实际,实践编程的能力。 3)熟练掌握JAVA语言中图形用户界面程序的编写; 4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。 课程设计的要求: 由于Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等 特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义, 而且有利于软件的维护和继承学会java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面 设计、Java多线程编程、Applet程序的设计、文件和网络输入输出流编程、Java数据库编程等。通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。

JAVA 连连看 源代码行行注释

所实现应用的功能及具体实现. 需求规定 退出:退出界面,停止游戏。 重列:重新排列按键。 再来一局:重新开始一局,分数不重计。运行环境 硬件要求:普通计算机即可。 操作系统:windows XP,windows 7 等 开发环境:Myeclipse 8.5

流程图 实现思路 1:将整张地图拆分为n行m列,接着用一个二维数组表示将在地图中显示什么,例如0表示此处没有东西(如果两个按键可以消除时,就可以将数组中对应的元素赋为0)。 2:游戏中需要处理鼠标按下时间和获取鼠标当前点击坐标信息。 3:如果其在地图范围内按下某个按键,则将其转换为在二维数组中对应的行和列。

4:游戏关键就是如何判断两张图片可以消除,这也是连连看游戏的关键吧。在这个简单连连看中可以直接比较两个按键标示的数字,如果数字相等则可以消去,如果不相等则不能消去。 我们可以将开始点的前后左右四个方向的结点都推入队列中,继续查看其前后左右的前后左右,如果其中有为0的(代表此处没有图片,存在通路),还是元素值和开始点相同的都推入队列中。 在判断前后左右时就可以对转弯次数进行累加了,如果还是原来的方向,则保持转弯次数不变,否则转弯次数+1。如果搜索的过程中,发现存在转弯的次数少于或者等于2的,且其结点信息和结束点一样,代表我们已经找到了开始点和结束点之间的通路了,这时也就是两个按键可以消去了。 5:如何画出两张图片消去的路径呢,我的思路是这样的,每次寻找到一个新结点时,我们可以将其上一步结点的信息也保存下来,这样当我们找到结束点时,我们就可以沿着相反的方向,搜索回去,找出原来的整条路径。

代码介绍及分析。 package test; import javax.swing.*; //AWT的扩展 import java.awt.*; //抽象窗口工具包 import java.awt.event.*; class lianliankan implements ActionListener //实现ActionListener接口{ JFrame mainFrame; //主面板,JFrame定义的是一个容器,可向里面添加组件Container thisContainer; //定义一个容器 JPanel centerPanel,southPanel,northPanel; //子面板,JPanel是个轻量级容器,可添加入JFrame中 JButton diamondsButton[][] = new JButton[6][5];//定义存储游戏按钮的数组JButton exitButton,resetButton,newlyButton; //定义退出,重列,重新开始按钮JLabel fractionLable=new JLabel("0"); //定义分数标签,并初始化为0. JButton firstButton,secondButton; //分别记录两次先后被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; // 声明了一个静态布尔类型的变量,判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标 int i,j,k,n;//消除方法控制 public void init(){ //init方法 mainFrame=new JFrame("连连看"); //定义主面板为命名为“连连看”的JFrame容器thisContainer = mainFrame.getContentPane(); //初始化mainFrame. thisContainer.setLayout(new BorderLayout()); //定义布局为东西南北中的形式centerPanel=new JPanel(); //初始化centerPanel southPanel=new JPanel(); //初始化southPanel northPanel=new JPanel(); //初始化northPanel thisContainer.add(centerPanel,"Center"); //将centerPanel加入mainFrame中的Center位置 thisContainer.add(southPanel,"South"); //将southPanel加入mainFrame中的South位置 thisContainer.add(northPanel,"North"); //将northPanel加入mainFrame中的North位置 centerPanel.setLayout(new GridLayout(6,5)); //将centerPanel初始化为6*5

相关文档
最新文档