从零开发HarmonyOS(鸿蒙)手机小游戏——数字华容道

HarmonyOS(鸿蒙)手机第一个小游戏app——数字华容道

  • 前言
  • 概述
  • 正文
    • 创建项目
    • 实现初始界面布局
    • 实现数字的随机打乱
    • 实现滑动或点击调换数字
    • 实现游戏成功界面
  • 源代码
  • 结语

前言

2月16号HarmonyOS2.0手机开发者Beta版已经发布了,作为“1+8+N”战略的重要入口和生态核心,怎么能少得了手机应用开发呢,今天将由深鸿会深大学习小组(Zzt_01-23)从零基础开发第一个HarmonyOS手机小游戏——数字华容道(界面略丑陋,大佬别喷),此前已经在运动手表上成功开发了:HarmonyOS运动手表游戏合并、HarmonyOS手表游戏——数字华容道,同样是深鸿会深大小组学习完HarmonyOS后自行开发的一个鸿蒙demo,详细讲述了数字华容道在鸿蒙手机上开发思路。深鸿会深大学习小组是一群热衷于学习鸿蒙相关知识和开发鸿蒙相关应用的开发者们,我们的学习项目为:荔园Harmony,同时也欢迎与各位感兴趣的读者一起学习HarmonyOS开发,相互交流、共同进步。

概述

本个demo将从零基础开始完成鸿蒙小游戏APP在手机上的编译在项目中我们所使用到的软件为DevEco Studio,下载地址为:DevEco Studio下载、DevEco Studio安装教程,在项目中我们要实现的内容为数字华容道APP的开发。

  1. 打开引用首先为数字华容道的初始界面,点击开始游戏即会切换到数字华容道的游戏界面。
    在这里插入图片描述
  2. 进入数字华容道的游戏界面显示4*4的方阵,方阵中分布有随意打乱的1至15的数字和一个空白方格,方阵下方显示一个“重新开始”的按钮和一个“返回”按钮,点击“重新开始”按钮即会重新生成随意打乱的1至15的数字和一个空白方格的方阵,点击“返回”按钮即会切换到数字华容道的初始界面,最下方有四个指示不同方向箭头的按钮,点击任一按钮或向上、下、左、右任一方向滑动,空白方格周围对应位置的方格便会随之向对应的方向移动一格。
    在这里插入图片描述
  3. 经过若干次滑动或点击后,当所有的数字按顺序排列后,则会弹出游戏成功的界面,再滑动或点击也不会有任何变化。
    在这里插入图片描述

正文

创建项目

DevEco Studio下载安装成功后,打开DevEco Studio,点击左上角的File,点击New,再选择New Project,选择Phone选项,选择默认的模板(java版),然后选择保存路径,将文件命名为MyPhoneApplication(文件名不能出现中文或者特殊字符,否则将无法成功创建项目文件),最后点击Finish。
在这里插入图片描述
在这里插入图片描述

实现初始界面布局

首先,我们要先实现数字华容道的初始界面,点击开始游戏即会切换到另一个空白的界面。
在这里插入图片描述

  1. 先在entry>src>main>config.json文件中最下方"launchType": “standard"的后面添加以下代码,并且将上方的“label”:“MyPhoneApplication”修改成"label”: “数字华容道”,这样就实现去掉应用上方的标题栏和将应用名称改为数字华容道了
    config.json最下面部分代码:
"orientation": "unspecified","name": "com.example.myphoneapplication.MainAbility","icon": "$media:icon","description": "$string:mainability_description","label": "数字华容道","type": "page","launchType": "standard","metaData": {"customizeData": [{"name": "hwc-theme","value": "androidhwext:style/Theme.Emui.Light.NoTitleBar","extra": ""}]}
  1. 先将我们事先准备好的图片复制粘贴到entry>src>main>resources>base>media文件夹中(ctrl+c、ctrl+v复制粘贴),并且命名为game,点击OK
    在这里插入图片描述
    在entry>src>main>resources>base>layout>ability_main.xml中添加布局,先将事先存在的Text组件删去,添加Image图片组件,引入我们刚才复制粘贴的图片,再添加一个Button按钮组件,加入唯一标识符id并配置好其他相应的属性
<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:orientation="vertical"><Imageohos:height="match_parent"ohos:width="match_parent"ohos:image_src="$media:game"ohos:layout_alignment="center"/><Buttonohos:id="$+id:button_game"ohos:height="150"ohos:width="515"ohos:text_alignment="center"ohos:top_margin="-810"ohos:left_margin="250"/></DirectionalLayout>
  1. 在entry>src>main>java>com.example.myphoneapplication>slice中右键选择New>Java Class增加一个空白的类以用来后面编写数字华容道的游戏界面,并且命名为SecondAbilitySlice在这里插入图片描述
    将entry>src>main>java>com.example.myphoneapplication>slice>SecondAbilitySlice中的代码修改成如下:
package com.example.myphoneapplication.slice;import com.example.myphoneapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;public class SecondAbilitySlice extends AbilitySlice {public void onStart(Intent intent) {super.onStart(intent);}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);}
}
  1. 在entry>src>main>java>com.example.myphoneapplication>slice>MainAbilitySlice中的onStart函数中添加一个按钮指向我们(2)中添加的按钮,按钮添加一个响应点击事件的函数,用parsent函数跳转到SecondAbilitySlice
package com.example.myphoneapplication.slice;import com.example.myphoneapplication.ResourceTable;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;public class MainAbilitySlice extends ohos.aafwk.ability.AbilitySlice {@Overridepublic void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);Button button = (Button) findComponentById(ResourceTable.Id_button_game);button.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {present(new SecondAbilitySlice(),new Intent());}});}@Overridepublic void onActive() {super.onActive();}@Overridepublic void onForeground(Intent intent) {super.onForeground(intent);}
}

至此,这一部分就完成了。

实现数字的随机打乱

然后我们要在数字华容道的游戏界面生成随意打乱的1至15的数字和一个空白方格的方阵。
在这里插入图片描述
在entry>src>main>java>com.example.myphoneapplication>slice>SecondAbilitySlice编写代码
先定义个一个位置布局layout和一个二维数组grids,创建函数initializeinitialize()分别对其初始化,在onStart函数中调用函数initializeinitialize()

private float starX, starY, distanceX, distanceY;private DirectionalLayout layout;private int[][] grids;public void onStart(Intent intent) {super.onStart(intent);initialize();}public void initialize(){layout = new DirectionalLayout(this);grids = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8,}, {9, 10, 11, 12}, {13, 14, 15, 0}};}

然后定义函数drawGrids(int[][] grids)用于绘制4*4方阵和其二维数组对应的数字

public void drawGrids(int[][] grids){layout.setLayoutConfig((new ComponentContainer.LayoutConfig(ComponentContainer.LayoutConfig.MATCH_PARENT,ComponentContainer.LayoutConfig.MATCH_PARENT)));Component.DrawTask task=new Component.DrawTask() {public void onDraw(Component component, Canvas canvas) {Paint mPaint = new Paint();mPaint.setColor(Color.GRAY);RectFloat rect=new RectFloat(2,230,1078,1306);canvas.drawRect(rect,mPaint);for(int row = 0; row < 4; row++){for(int column = 0; column < 4; column++){mPaint.setColor(Color.CYAN);RectFloat rectFloat=new RectFloat(22+column*262,250+row*262,272+column*262,500+row*262);canvas.drawRect(rectFloat,mPaint);mPaint.setColor(Color.YELLOW);mPaint.setTextSize(125);if(grids[row][column]!=0){if(grids[row][column]<10){canvas.drawText(mPaint, String.valueOf(grids[row][column]),105+column*262,425+row*262);}else{canvas.drawText(mPaint, String.valueOf(grids[row][column]),65+column*262,425+row*262);}}}}}};layout.addDrawTask(task);setUIContent(layout);}

再定义函数changeGrids(int[][] grids,int direction),每次接收一个方向,2表示上移,-1表示左移,1表示右移,-2表示下移,找出空白方格所在位置对应的二维数组下标,对应的方格和空白方格对应的二维数组的数值对调

public void changeGrids(int[][] grids,int direction){int row_0 = 3;int column_0 = 3;int temp;for(int row = 0; row < 4; row++) {for (int column = 0; column < 4; column++) {if(grids[row][column] == 0){row_0 = row;column_0 = column;}}}if(direction == -1 && (column_0 + 1) <= 3){temp = grids[row_0][column_0 + 1];grids[row_0][column_0 + 1] = grids[row_0][column_0];grids[row_0][column_0] = temp;}else if (direction == 1 && (column_0 - 1) >= 0) {temp = grids[row_0][column_0 - 1];grids[row_0][column_0 - 1] = grids[row_0][column_0];grids[row_0][column_0] = temp;} else if (direction == 2 && (row_0 + 1) <= 3) {temp = grids[row_0 + 1][column_0];grids[row_0 + 1][column_0] = grids[row_0][column_0];grids[row_0][column_0] = temp;} else if (direction == -2 && (row_0 - 1) >= 0) {temp = grids[row_0 - 1][column_0];grids[row_0 - 1][column_0] = grids[row_0][column_0];grids[row_0][column_0] = temp;}}

定义函数createGrids(int[][] grids)用于随机生成一个表示方向的数字,循环调用函数changeGrids(grids,direction)用于随机打乱二维数组对应的数字

public void createGrids(int[][] grids){int[] array = {-1,-2,1,2};for(int i = 0; i < 100; i++){int random = (int)Math.floor(Math.random()*4);int direction = array[random];changeGrids(grids,direction);}}
最后在initialize()函数中调用createGrids(grids)函数和drawGrids(grids)函数public void initialize(){layout = new DirectionalLayout(this);grids = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8,}, {9, 10, 11, 12}, {13, 14, 15, 0}};createGrids(grids);drawGrids(grids);}

至此,这一部分完成了。

实现滑动或点击调换数字

添加“重新开始”和“返回”按钮,在最下方添加四个指示不同方向箭头的按钮,点击任一按钮或向上、下、左、右任一方向滑动,空白方格周围对应位置的方格便会随之向对应的方向移动一格。
在这里插入图片描述
在entry>src>main>java>com.example.myphoneapplication>slice>SecondAbilitySlice编写代码
先定义一个函数drawButton()用于绘制所有的按钮,四个指示不同方向箭头的按钮分别添加四个响应点击事件的函数,分别调用对应的changeGrids(grids,direction)函数实现空白方格周围对应位置的方格便会随之向对应的方向移动一格,并调用drawGrids(grids)函数用于绘制新的方阵

public void drawButton(){Button button=new Button(this);button.setText("重新开始");button.setTextSize(100);button.setTextAlignment(TextAlignment.CENTER);button.setTextColor(Color.WHITE);button.setMarginTop(1400);button.setMarginLeft(80);button.setPadding(20,20,20,20);ShapeElement background = new ShapeElement();background.setRgbColor(new RgbColor(174, 158, 143));background.setCornerRadius(100);button.setBackground(background);layout.addComponent(button);Button button0=new Button(this);button0.setText("返回");button0.setTextSize(100);button0.setTextAlignment(TextAlignment.CENTER);button0.setTextColor(Color.WHITE);button0.setMarginTop(-170);button0.setMarginLeft(680);button0.setPadding(20,20,20,20);button0.setBackground(background);layout.addComponent(button0);ShapeElement background0 = new ShapeElement();background0.setRgbColor(new RgbColor(174, 158, 143));background0.setCornerRadius(100);Button button1=new Button(this);button1.setText("↑");button1.setTextAlignment(TextAlignment.CENTER);button1.setTextColor(Color.WHITE);button1.setTextSize(100);button1.setMarginLeft(500);button1.setMarginTop(70);button1.setPadding(10,0,10,0);button1.setBackground(background0);button1.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {changeGrids(grids,2);}});layout.addComponent(button1);Button button2=new Button(this);button2.setText("←");button2.setTextAlignment(TextAlignment.CENTER);button2.setTextColor(Color.WHITE);button2.setTextSize(100);button2.setMarginTop(10);button2.setMarginLeft(400);button2.setPadding(10,0,10,0);button2.setBackground(background0);button2.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {changeGrids(grids,-1);}});layout.addComponent(button2);Button button3=new Button(this);button3.setText("→");button3.setTextAlignment(TextAlignment.CENTER);button3.setTextColor(Color.WHITE);button3.setTextSize(100);button3.setMarginLeft(600);button3.setMarginTop(-130);button3.setPadding(10,0,10,0);button3.setBackground(background0);button3.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {changeGrids(grids,1);}});layout.addComponent(button3);Button button4=new Button(this);button4.setText("↓");button4.setTextAlignment(TextAlignment.CENTER);button4.setTextColor(Color.WHITE);button4.setTextSize(100);button4.setMarginLeft(500);button4.setMarginTop(10);button4.setPadding(10,0,10,0);button4.setBackground(background0);button4.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {changeGrids(grids,-2);}});layout.addComponent(button4);drawGrids(grids);}

然后添加一个函数slideGrids()为布局layout添加一个滑动事件,并获取滑动开始与结束的坐标,并计算出大致的滑动方向,分别调用对应的changeGrids(grids,direction)函数实现空白方格周围对应位置的方格便会随之向对应的方向移动一格,并调用drawGrids(grids)函数用于绘制新的方阵,并在开头添加相应的变量

private float starX, starY, distanceX, distanceY;public void slideGrids(){layout.setTouchEventListener(new Component.TouchEventListener() {@Overridepublic boolean onTouchEvent(Component component, TouchEvent touchEvent) {MmiPoint point = touchEvent.getPointerScreenPosition(0);switch (touchEvent.getAction()) {case TouchEvent.PRIMARY_POINT_DOWN:starX = point.getX();starY = point.getY();break;case TouchEvent.PRIMARY_POINT_UP:distanceX = point.getX() - starX;distanceY = point.getY() - starY;break;}if (gameover() == false){if (Math.abs(distanceX) > Math.abs(distanceY)) {if (distanceX > 200) {changeGrids(grids,1);} else if (distanceX < -200) {changeGrids(grids,-1);}} else if (Math.abs(distanceX) < Math.abs(distanceY)){if (distanceY > 200) {changeGrids(grids,-2);} else if (distanceY < -200) {changeGrids(grids,2);}}}drawGrids(grids);return false;}});}

最后在initialize()函数中调用slideGrids()函数和drawButton()函数

public void initialize(){layout = new DirectionalLayout(this);grids = new int[][]{{1, 2, 3, 4}, {5, 6, 7, 8,}, {9, 10, 11, 12}, {13, 14, 15, 0}};createGrids(grids);slideGrids();drawButton();drawGrids(grids);
}

至此,这一部分完成了

实现游戏成功界面

点击“重新开始”按钮即会重新生成随意打乱的1至15的数字和一个空白方格的方阵,点击“返回”按钮即会切换到数字华容道的初始界面,经过若干次滑动或点击后,当所有的数字按顺序排列后,则会弹出游戏成功的界面,再滑动或点击也不会有任何变化。在这里插入图片描述
在entry>src>main>java>com.example.myphoneapplication>slice>SecondAbilitySlice编写代码
首先定义一个函数drawText()用于绘制游戏成功字样

 public void drawText(){Text text=new Text(this);text.setText("游戏成功");text.setTextSize(100);text.setTextColor(Color.BLUE);text.setTextAlignment(TextAlignment.CENTER);text.setMarginsTopAndBottom(-2000,0);text.setMarginsLeftAndRight(350,0);layout.addComponent(text);setUIContent(layout);}

然后定义一个函数gameover()用于判断二维数组的数字是否按顺序排列,当二维数组的数字按顺序排列时返回true,否则返回false

public boolean gameover() {int[][] gameoverGrids = {{1, 2, 3, 4}, {5, 6, 7, 8,}, {9, 10, 11, 12}, {13, 14, 15, 0}};for (int row = 0; row < 4; row++) {for (int column = 0; column < 4; column++) {if (grids[row][column] != gameoverGrids[row][column]) {return false;}}}return true;}

再在drawButton()函数中重新开始按钮中添加一个响应点击事件的函数,用于调用函数initialize()实现重新生成随意打乱的1至15的数字和一个空白方格的方阵,返回按钮中添加一个响应点击事件的函数,用parsen函数返回数字华容道的初始界面,四个指示不同方向箭头的按钮的响应点击事件的函数中增加一个判断,当函数gameover()返回为false时才调用各自的changeGrids(grids,direction)函数,最后增加一个判断,当函数gameover()返回为true时调用函数drawText()

public void drawButton(){//部分代码没有贴出,可自行下载源代码查看button.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {initialize();}});button0.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {present(new SecondAbilitySlice(),new Intent());}});button1.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {if (gameover() == false){changeGrids(grids,2);}}});button2.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {if (gameover() == false){changeGrids(grids,-1);}}});button3.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {if (gameover() == false){changeGrids(grids,1);}}});button4.setClickedListener(new Component.ClickedListener() {@Overridepublic void onClick(Component component) {if (gameover() == false){changeGrids(grids,-2);}}});if(gameover()){drawText();}}

在函数slideGrids()函数中增加一个判断,当函数gameover()返回为false时才调用changeGrids(grids,direction)函数,最后增加一个判断,当函数gameover()返回为true时调用函数drawText()

public void slideGrids(){//部分代码没有贴出,可自行下载源代码查看if (gameover() == false){//{...}}if(gameover()){drawText();}}

至此,整个demo全部完成了。

源代码

源代码下载链接:源代码下载。

结语

以上就是数字华容道小游戏在手机的主要编写思路以及代码,源码将放在附件中,欢迎大家下载,感兴趣的读者可以自行跟着编写学习,相信你们也能够完成的。更多深鸿会深大小组学习项目可以查看荔园Harmony,如果有遇到什么问题,或者查找出其中的错误之处,或者能够优化代码和界面,也欢迎各位在评论区留言讨论,让我们一起学习进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620981.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【180929】败走华容道游戏源码

这是一款基于WPF非常经典的华容道游戏源码。 古老的中国游戏&#xff0c;以其变化多端、百玩不厌的特点与魔方、独立钻石棋一起被国外智力专家并称 为“智力游戏界的三个不可思议”。它与七巧板、九连环等中国传统益智玩具还有个代名词叫作“中国的难题”。 游戏玩法&#xff1…

华容道小游戏

华容道代码&#xff1a; package ytu.jsj.com.cn; import java.awt.*; import java.awt.event.*; import javax.swing.*;public class Hua_Rong_Road extends JFrame implements MouseListener,KeyListener,ActionListener{Person person[]new Person[10];JButton left,right,a…

【180927】华容道游戏源码

本源码是一个采用winform进行开发的华容道游戏源码&#xff0c;华容道游戏作为一个经典游戏&#xff0c;各部分设计都恰到好处&#xff0c;非常巧妙&#xff0c;因此成为世界游戏界的三大不可思议。华容道游戏源于三国时期著名的历史故事。东汉末年&#xff0c;曹操、孙权以及刘…

28连局华容道游戏

华容道游戏取材于三国时期,关羽在华容道放走曹操的故事。这个游戏一共28局,是根据一款手机游戏编写的,希望大家能够喜欢。一个益智类的小游戏,大家可以在工作之余作为消遣之乐。 玩不过去没有关系,我们可以把游戏进度存储起来,下次玩的时候读取进度文件就可以了,我们可以…

华容道游戏VB.NET 2010 版28连局

这一版的华容道游戏,有玩法演示,局数、步数、时间提示完善。新增加了关数名字。 托动处理的更加完美,当鼠标手动图片后图片消失,鼠标变成你托动的图片,产生一种立体的感觉。 请大家查看新版的华容道游戏VB.NET 2010 版28连局。 下载地址:http://blog.sina.com.cn/…

经典华容道游戏(含bfs求解)

前言 这是数据结构的课设作业&#xff0c;也是我第一次写的千行代码小游戏。 学习EasyX图形库写完程序一共用了三天时间&#xff0c;可以说是相当熬人了。 当然&#xff0c;第一次写&#xff0c;难免不怎么好&#xff0c;比如无动画、无音乐、丑得不行的ui等等&#xff0c;体…

206. 反转链表 (简单系列)

给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1] 示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&#xff1a;[2,1] 示例 3&#xff1a; 输…

DebugInfo 模块功能系统介绍 文本上色 文本与表格对齐 分隔线 秒表计算器 语义日期

背景 今天系统性的为大家介绍一下 DebugInfo 模块。这个模块提供了一些丰富的基本功能的封装&#xff0c;希望能给有需要的人带来些许帮助。 文本上色 DebugInfo 模块引入了 colorama提供文本颜色支持。 # -*- coding:UTF-8 -*-# region 引入必要依赖 from DebugInfo.DebugI…

数字时钟器

数字时钟器 一、实现功能&#xff1a; 实现基本的时钟样式实现时间日期的文本显示实现仿真秒针走动时候的音效支持设置时间&#xff0c;点击时钟中间设置时间&#xff0c;点击边缘恢复系统时间。 二、效果截屏&#xff1a; 三、github源码地址 GitHub - LxNoMi/DigitalClock…

FPGA数字时钟

FPGA数字时钟1 本代码借鉴了一些&#xff0c;网上资源。 1.设计目的 &#xff08;1&#xff09;掌握数字电子钟的设计方法&#xff1b; &#xff08;2&#xff09;掌握常用数字集成电路的功能和使用&#xff1b; &#xff08;3&#xff09;巩固数字电路理论知识&#xff0c;掌握…

HSP高度敏感的人应该了解的内容(附图书资源)

推荐图书:《高敏感是种天赋》 在爆炸的信息海中希望你慢慢看&#xff0c;细细品~ 什么是高敏感人群&#xff1f; &#xff08;Highly Sensitive Person&#xff0c;简称HSP&#xff09;是指那些对外界刺激和情绪变化非常敏感&#xff0c;容易受到情绪的影响&#xff0c;并且需…

基于Arduino的多功能数字时钟

实现功能&#xff1a; 显示时间、日期和星期断电保存时间通过按钮设置时间、日期整点响铃自定义闹钟显示温度自定义报警温度按键功能&#xff1a;按选择键进入设置时间功能&#xff1b;同时按 - 键进入闹钟和报警温度设置功能&#xff1b;再按选择键光标跳动&#xff0c;光标…

【Proteus】多功能数字时钟设计

ZQQQ 2021.12.27 课设一:各芯片引脚介绍:1:数码管:[^1]2:CD4511(译码显示):[^2]3:CD4518(计数器)[^3]3:555定时器4:CD4011和CD4012 二:各部分电路图搭建1:校正时间电路2:整点报时电路3:分频电路4:进制电路 课设 我们将该电路分为几个部分: 1:显示电路(用6个共阴数码管来显示) 2…

单片机:数字式时钟—日历

单片机&#xff1a;数字式时钟—日历 功能要求&#xff1a; &#xff08;1&#xff09;显示时分秒&#xff0c;年月日 &#xff08;2&#xff09;具有&#xff1a;启动&#xff08;按下此键后单片机才开始工作&#xff09;、暂停、继续、清零、设置时间/年月日/闹钟的功能 &am…

Quartus ii 13.1 数字时钟

内容摘要&#xff1a; 使用计数器和数据选择器等器件实现数字时钟电路。电路最终在开发板上显示的是时钟的秒和分&#xff08;开发板所限&#xff0c;当然如果开发板支持8位显示的话也可以自己加到小时位的显示&#xff09;。电路包四个部分&#xff1a;时钟信号分频电路&#…

FPGA-Verilog多功能数字时钟

一&#xff0e;数字时钟设计 1.硬件资源&#xff1a;共阴极数码管一块&#xff0c;FPGA开发板一块&#xff08;EP4CE40F23C8&#xff09;&#xff1b; 2. 开发板资源&#xff1a;3颗独立按键&#xff0c;数码管接口&#xff1b; 3. 功能设计&#xff1a;三种功能&#xff1a…

【Java】Java数字时钟

应用名称&#xff1a;Java数字时钟 用到的知识&#xff1a;Java GUI编程&#xff0c;线程 开发环境&#xff1a;win8eclipsejdk1.8 功能说明&#xff1a;可以显示当前系统的年月日、星期以及准确时间&#xff0c;并实时更新显示。 效果图&#xff1a; 源代码&#xff1a; i…

51单片机入门——(新)简易数字时钟

文章目录 设计要求原理图按键部分介绍 代码解析 设计要求 实现正确稳定地显示小时(两位数)、分钟(两位数)、秒钟(两位数)&#xff0c;同时数码管应无闪烁问题。通过按键分别实现时、分信息的调整&#xff0c;方便用户对时间的校准。加入闹铃功能在&#xff08;本设计中用LED代…

基于FPGA的数字时钟verilog开发

目录 一、理论基础 二、案例背景 1.问题描述 2.思路流程 三、verilog核心仿真 四、仿真结论分析 五、参考文献 一、理论基础 整个程序分为以下三大部分&#xff1a; 时钟控制部分&#xff0c;分为调整分&#xff0c;秒功能&#xff0c;秒清零功能&#xff1b; 暂停功…

51单片机数字时钟

我们学单片机&#xff0c;一般都会写数字时钟编程。它能帮助我们&#xff1a; a&#xff0e; 能够系统性地总结掌握的知识&#xff0c;将单元模块知识有机的结合在一起。 b&#xff0e; 能够充分协调好硬件与软件之间的相互结合&#xff0c;合理设计硬件电路。 c&#xff0…