Java开发入门:适合新手练手的Java项目(附源码下载)
Java作为一门古老的语言,已有20年左右的历史,这在发展日新月异的技术圈可以说是一个神话。虽然不少人曾抱怨Java语言就像老太太的裹脚布,又臭又长,有时写了500行都不能表达程序员的意图。
但从市场上的招聘现状看,Java工程师依然有着其他语言不可取代的竞争优势。
看到了这里,恭喜正式开始进入主题:适合新手练手的Java项目有哪些呢?下面和千锋广州小编一起来看看吧!
图书管理系统:
源码下载(实例一):
jsp开发完整的博研图书馆后台管理系统,不使用框架开发的,太完美了http://www.zuidaima.com/share/2358272909446144.htm
源码下载(实例二):
JavaWeb图书馆管理系统源码mysql版本http://download.csdn.net/download/defonds/7123499
源码下载(实例三):
GitHub – uboger/LibraryManager: Java GUI 图书馆管理系统https://github.com/uboger/LibraryManager
简易的聊天系统:
源码下载(实例一):
Java swing开发网络聊天室群聊系统,基于Java多线程socket编程http://www.zuidaima.com/share/2813720957340672.htm
源码下载(实例二):
Java swing开发大猫聊天室源码,简单易懂,适合Java swing初学者http://www.zuidaima.com/share/2476196100705280.htm
源码下载(实例三):
Java websocket开发简单聊天室系统,实现群聊与一对一单人聊天案例http://www.zuidaima.com/share/2681158015126528.htm
源码下载(实例四):
jsp开发简单聊天室demo-分享
http://www.zuidaima.com/share/2920853761723392.htm
源码下载(一):
Java坦克大战+源代码(适合初学者)http://download.csdn.net/download/csyrooney/1692151
源码下载(二):
GitHub – wangzhengyi/TankWar: 用J2SE写的一个坦克大战小游戏,巩固一下Java基础https://github.com/wangzhengyi/TankWar
五子棋:
源码下载(一):
Java实践(十一)——五子棋
http://blog.csdn.net/cnlht/article/details/8176130
源码下载(二):
Java swing开发的五子棋小游戏源码
http://www.zuidaima.com/share/2937407256464384.htm
源码下载(三):
Java swing开发单机版五子棋源代码下载
http://www.zuidaima.com/share/1550463383030784.htm
源码下载(四):
Java五子棋算法和代码
http://download.csdn.net/download/longyin415/2267863
贪吃蛇:
源码下载(实例一):
Java贪吃蛇源代码
http://download.csdn.net/download/Java_cxrs/1005980
源码下载(实例二):
Java swing编写的3个小游戏程序源码,俄罗斯方块,贪吃蛇和坦克大战
http://www.zuidaima.com/share/2255780075867136.htm
源码下载(实例三):
Java贪吃蛇源代码 、 Java贪吃蛇源代码
http://blog.csdn.net/yaerfeng/article/details/23254623
贪吃蛇小游戏项目总结
经过了几天的思考和完善,我的贪吃蛇也是终于完成啦。属实是很开心的,当然完成这个项目的过程也是很曲折的。因此就要来一次全面的总结来对自己在这个过程中学到的新知识加以巩固。
这个项目不是完全以自己的知识范围所写出来的,我想到要开发贪吃蛇,第一个想到的问题就是怎么样让蛇显示到我想要它在的位置上呢。由于我之前并没有接触过SetConsoleCursorPosition()函数,因此这个问题就让我很困惑。因此我就开始看了慕课上的教程,于是知道了SetConsoleCursorPosition()函数可以解决我的这个问题。但是对这个函数比较陌生,因此我就在CSDN上查了这个函数加以学习。这个函数可以将你的光标移动到你想移动到的位置,这个函数是需要传入两个参数,但是参数并不是你想要移动的X,Y位置坐标,这里的参数是我之前没有接触到的。SetConsoleCursorPosition(hout,coord);coord是一个结构体,这个是由系统定义好的结构体,结构体中包括了两个成员,一个是x,一个是y,这就是你所想要移动到的坐标。那hout是什么呢?我查到的资料是说hout是一个句柄。我现在的知识量还不够特别深入详细地明白句柄的作用。但在使用这个函数的时候,只需要将coord中的X和Y两个元素赋值就可以进行操作啦。在项目中定义的gotoxy()函数中就用到了这个函数。而为了游戏的美观我又学习到了一个新的函数SetConsoleTextAttribute()函数,这个函数是API设置控制台窗口字体颜色和背景色的函数,可以改变字体颜色,让游戏更加美观。在实现键盘控制功能的时候又学习到了一个新的函数GetAsyncKeyState(VK_UP),这个函数是用来接收键盘的输入值,这里我们通过键盘的上下左右来操作蛇,直接就是UP,DOWN,RIGHT,LEFT来代表键盘的上下左右,这全都是由系统函数所规定的,直接调用即可。
除了上述三个新接触的函数,其它功能的实现都是在我已学知识范围内可以完成的或者是之前接触过的。本次我使用了刚学的链表完成了对蛇的创建。使用链表的好处就是在于实现蛇吃掉食物蛇身增加一节,以及蛇咬到自己,蛇撞墙这些功能时比较好理解,比较形象。相对于用数组来实现这些功能,个人觉得还是链表更简单一些。
新学到的知识总结完啦,下面就来总结一下自己在代码敲完之后,运行程序出现的问题,以及自己的解决方案。我在代码敲完之后,运行程序并进行测试,在多次运行程序之后,发现了这样的问题,那就是食物和蛇身重合的情况还是会出现。
一开始实现这个功能的代码如下:
/*
随机创建食物
*/
void createfood()
{
snake *food_1;
srand((unsigned)time(NULL)); //初始化随机数
food_1=(snake*)malloc(sizeof(snake)); //初始化food_1
while((food_1->x%2)!=0) //保证其为偶数,使得食物能与蛇头对齐,然后食物会出现在网格线上
{
food_1->x=rand()%52+2; //食物随机出现,食物的x坐标在2~52
}
food_1->y=rand()%24+1; //食物的y坐标在1~24
q=head;
while(q->next!=NULL)
{
if(q->x==food_1->x && q->y==food_1->y) //判断蛇身是否与食物重合
{
free(food_1); //如果蛇身和食物重合,那么释放食物指针
createfood(); //重新创建食物
}
q=q->next;
}
gotoxy(food_1->x,food_1->y);
food=food_1;
color(12);
printf(\”●\”); //输出食物
}
这是最开始的代码,这部分我要实现的功能是随机生成食物,并判断是否与蛇身重合,如果重合,就重新生成食物。但从运行效果来看,这部分的代码还是有问题的。于是我想着去把这部分代码给改善一下。思考了很多天,也和同学讨论了这部分的问题,我也在CSDN上问了一些大神博主,最终找出了这部分代码出错的原因。出错的原因有两个:1.while(q->next! =NULL)这个while循环的判断条件导致蛇尾没有进行判断就跳出了循环。2.在while循环中递归调用了这个函数本身,假若第一个节点是与食物重合的,那么会第二次调用这个函数本身,此时第一次调用这个函数中的food_1是被释放掉的。如果第二次调用中食物不在蛇身上产生了,第二次调用结束,那么这个函数回到第一次调用的时候gotoxy(food_1->x,food_1->y);这句话就是违法的。第一个错误很简单,但是即使把第一个错误改掉之后,我发现第二个错误没法改。因此我得出了创建食物和判断是否与蛇身重合不能写在一个函数中的结论。于是我想把这个函数拆成两个函数,但具体改的方案不是我自己完成的,是我和同学一起讨论,最终完成了修改。
修改完的这部分代码如下:
/*
随机出现食物
*/
void createfood()
{
snake *food_1;
srand((unsigned)time(NULL)); //初始化随机数
food_1=(snake*)malloc(sizeof(snake)); //初始化food_1
do
{
food_1->x=rand()%(52/2)*2+2; //食物随机出现,食物的x坐标在2~52
food_1->y=rand()%24+1; //食物的y坐标在1~24
}
while(intobody(food_1->x,food_1->y));
gotoxy(food_1->x,food_1->y);
food=food_1;
color(12);
printf(\”●\”); //输出食物
}
/*
判断食物是否与蛇身重合
*/
int intobody(int x,int y)
{
for(q=head;q!=NULL;q=q->next)
{
if(q->x==x&&q->y==y)
return 1;
}
return 0;
}
把原来的那个函数拆成了两个函数,一个用来创建食物,一个用来判断是否与蛇身重合,如果重合,第二个函数返回值为1,从而导致第一个函数继续循环,重新创建食物,直到不再和蛇身重合,第二个函数返回值为0,第一个函数跳出循环并且打印食物。这样修改十分具有可行性。在运行了很多次后都没有出现蛇身与食物重合的情况。自此,代码完善完成,贪吃蛇项目正式完工。
在这次的项目实践中我觉得自己独立思考问题的能力还有待提高,并且我觉得自己知识面太窄,需要想办法扩充自己的知识面。我的学习路径主要就是CSDN和百度,我认为CSDN上博主的讲解还是很好懂的,比较不错。后期我要试着开发其他一些小程序并且继续通过CSDN和百度不断学习,不断提高自己的编程能力,加油!!!
最后,想要源码的同学请点个赞并私聊我吧!
我是热爱剪辑与编程小刘同学!
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。