
程序是从main函数开始执行的,你没有加循环条件,当然执行一次就不再执行了,不过好像有些编译软件会在你不加循环条件也会循环执行的,改成如下再试试
void main()
{
while(1)
{
Beep=0;
Delay(5000);
}
}
楼上写的程序是无源蜂鸣器的,如果你的是有源的蜂鸣器只需要给低电平即可,不需要给方波
右键“我的电脑”->“管理”->“设备管理器”。打开菜单的“查看”项,并点选“显示隐藏的设备”。
此时展开新出现的“非即插即用驱动程序”,找到“Beep”项,右键点击该项并点选属性。
在d出的对话框中的“设备用法”一栏中选择“不要使用这个设备(停用)”后点击“确定”(或者在上一步右键菜单中选择停用)。这时系统会提示重新启动之后才能生效。
重启系统之后可以发现,恼人的Beep音已经一去不复返了。
另外还有如下几种方法:
1禁用“嘀嘀”声的设备来源
这是由beep驱动服务所提供,可以将beep驱动的启动类型设置为禁用,打开CMD窗口,运行以下命令:scconfigbeepstart=disabled
2停止beep驱动
可以运行以下命令:scstopbeep3注册表里面修改HKEY_CURRENT_USER/ControlPanel/SoundBeep:No
需用VB实现,代码如下
'定义蛇的运动速度枚举值
Private Enum tpsSpeed
QUICKLY = 0
SLOWLY = 1
End Enum
'定义蛇的运动方向枚举值
Private Enum tpsDirection
D_UP = 38
D_DOWN = 40
D_LEFT = 37
D_RIGHT = 39
End Enum
'定义运动区域4个禁区的枚举值
Private Enum tpsForbiddenZone
FZ_TOP = 30
FZ_BOTTOM = 5330
FZ_LEFT = 30
FZ_RIGHT = 5730
End Enum
'定义蛇头及身体初始化数枚举值
Private Enum tpsSnake
SNAKEONE = 1
SNAKETWO = 2
SNAKETHREE = 3
SNAKEFOUR = 4
End Enum
'定义蛇宽度的常量
Private Const SNAKEWIDTH As Integer = 100
Private Sub Form_Load()
MeShow
MelblTitle = "BS贪食蛇 — (版本 " & AppMajor & "" & AppMinor & "" & AppRevision & ")"
MeCaption = MelblTitleCaption
frmSplashShow 1
End Sub
'该过程用于使窗体恢复原始大小
Private Sub Form_Resize()
If MeWindowState <> 1 Then
MeCaption = ""
MeHeight = 6405 '窗体高度为 6405 缇
MeWidth = 8535 '窗体宽度为 8535 缇
MeLeft = (ScreenWidth - Width) \ 2
MeTop = (ScreenHeight - Height) \ 2
End If
End Sub
'该过程用于重新开始开始游戏
Private Sub cmdGameStart_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Beep
msg = MsgBox("您确认要重新开始游戏吗?", 4 + 32, "BS贪食蛇")
If msg = 6 Then Call m_subGameInitialize
End Sub
'该过程用于暂停/运行游戏
Private Sub chkPause_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If MechkPauseCaption = "暂停游戏(&P)" Then
MetmrSnakeMoveEnabled = False
MetmrGameTimeEnabled = False
MepicMoveAreaEnabled = False
MelblPauseLabVisible = True
MechkPauseCaption = "继续游戏(&R)"
Else
MetmrSnakeMoveEnabled = True
MetmrGameTimeEnabled = True
MepicMoveAreaEnabled = True
MelblPauseLabVisible = False
MechkPauseCaption = "暂停游戏(&P)"
End If
End Sub
'该过程用于显示游戏规则
Private Sub cmdGameRules_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Beep
MsgBox " BS贪食蛇:一个规则最简单的趣味游戏,您将用键盘" & Chr(13) & _
"上的4个方向键来控制蛇的运动方向。在运动过程中蛇" & Chr(13) & _
"不能后退,蛇的头部也不能接触到运动区域的边线以外" & Chr(13) & _
"和蛇自己的身体,否则就游戏失败。在吃掉随机出现的" & Chr(13) & _
"果子后,蛇的身体会变长,越长难度越大。祝您好运!!", 0 + 64, "游戏规则"
End Sub
'该过程用于显示游戏开发信息
Private Sub cmdAbout_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Beep
MsgBox "BS贪食蛇" & "(V-" & AppMajor & "" & AppMinor & "版本)" & Chr(13) & Chr(13) & _
"" & Chr(13) & Chr(13) & _
"由PigheadPrince设计制作" & Chr(13) & _
"CopyRight(C)2002,BestSoftTCG", 0, "关于本游戏"
End Sub
'该过程用于退出游戏
Private Sub cmdExit_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Beep
msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇")
Select Case msg
Case 6
End
Case 7
MechkWindowButton(2)Value = 0
Exit Sub
End Select
End Sub
'该过程用于拖动窗体_(点击图标)
Private Sub imgWindowTop_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ReleaseCapture
SendMessage Mehwnd, WM_SYSCOMMAND, SC_MOVE, 0
End Sub
'该共用过程用于处理窗体控制按钮组的相关 *** 作_(锁定、最小化、退出)
Private Sub chkWindowButton_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button <> 1 Then Exit Sub
Select Case Index
Case 0 '锁定窗体
If MechkWindowButton(0)Value = 1 Then
MeimgWindowTopBorderStyle = 0
MeimgWindowTopEnabled = False
Else
MeimgWindowTopBorderStyle = 1
MeimgWindowTopEnabled = True
End If
Case 1 '最小化
MeWindowState = 1
MechkWindowButton(1)Value = 0
MeCaption = "BS贪食蛇 — (V-" & AppMajor & "" & AppMinor & "版本)"
Case 2 '退出
Beep
msg = MsgBox("您要退出本游戏吗?", 4 + 32, "BS贪食蛇")
Select Case msg
Case 6
End
Case 7
MechkWindowButton(2)Value = 0
Exit Sub
End Select
End Select
End Sub
'该过程用于设置蛇运动速度的快慢
Private Sub hsbGameSpeed_Change()
MetmrSnakeMoveInterval = MehsbGameSpeedValue
End Sub
'该过程用于通过键盘的方向键改变蛇的运动方向
Private Sub picMoveArea_KeyDown(KeyCode As Integer, Shift As Integer)
Select Case g_intDirection
Case D_UP
If KeyCode = D_DOWN Then Exit Sub
Case D_DOWN
If KeyCode = D_UP Then Exit Sub
Case D_LEFT
If KeyCode = D_RIGHT Then Exit Sub
Case D_RIGHT
If KeyCode = D_LEFT Then Exit Sub
End Select
g_intDirection = KeyCode
End Sub
'该计时循环过程用于计算游戏耗费的秒数并显示
Private Sub tmrGameTime_Timer()
g_lngGameTime = g_lngGameTime + 1
MelblGameTimeCaption = g_lngGameTime & "秒"
End Sub
'该计时循环过程用于控制蛇的行动轨迹
Private Sub tmrSnakeMove_Timer()
Dim lngSnakeX As Long, lngSnakeY As Long, lngSnakeColor As Long
Dim lngPointX As Long, lngPointY As Long, lngPointColor As Long
Randomize
MepicMoveAreaSetFocus
MepicMoveAreaCls
'确认蛇头的运动方向并获取新的位置
Select Case g_intDirection
Case D_UP '向上运动
g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_OldX
g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_OldY
g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_CurY - SNAKEWIDTH
Case D_DOWN '向下运动
g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_OldX
g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_OldY
g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_CurY + SNAKEWIDTH
Case D_LEFT '向左运动
g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_OldX
g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_CurX - SNAKEWIDTH
g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_OldY
Case D_RIGHT '向右运动
g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_OldX
g_udtSnake(SNAKEONE)Snake_CurX = g_udtSnake(SNAKEONE)Snake_CurX + SNAKEWIDTH
g_udtSnake(SNAKEONE)Snake_CurY = g_udtSnake(SNAKEONE)Snake_OldY
End Select
'根据新的位置绘制蛇头
lngSnakeX = g_udtSnake(SNAKEONE)Snake_CurX
lngSnakeY = g_udtSnake(SNAKEONE)Snake_CurY
lngSnakeColor = g_udtSnake(SNAKEONE)Snake_Color
MepicMoveAreaPSet (lngSnakeX, lngSnakeY), lngSnakeColor
'移动蛇身体其他部分的位置
For i = 2 To g_intSnakeLength
g_udtSnake(i)Snake_CurX = g_udtSnake(i - 1)Snake_OldX
g_udtSnake(i)Snake_CurY = g_udtSnake(i - 1)Snake_OldY
lngSnakeX = g_udtSnake(i)Snake_CurX
lngSnakeY = g_udtSnake(i)Snake_CurY
lngSnakeColor = g_udtSnake(i)Snake_Color
MepicMoveAreaPSet (lngSnakeX, lngSnakeY), lngSnakeColor
Next i
'更新蛇旧的坐标位置
For j = 1 To g_intSnakeLength
g_udtSnake(j)Snake_OldX = g_udtSnake(j)Snake_CurX
g_udtSnake(j)Snake_OldY = g_udtSnake(j)Snake_CurY
Next j
'判断蛇在移动中是否到了禁区而导致游戏失败
If m_funMoveForbiddenZone(g_udtSnake(SNAKEONE)Snake_CurX, g_udtSnake(SNAKEONE)Snake_CurY) Then
Beep
MsgBox "您的蛇移动到了禁区,游戏失败!", 0 + 16, "BS贪食蛇"
MetmrSnakeMoveEnabled = False
MetmrGameTimeEnabled = False
MepicMoveAreaVisible = False
Exit Sub
End If
'判断蛇在移动中是否碰到了自己的身体而导致游戏失败
If m_funTouchSnakeBody(g_udtSnake(SNAKEONE)Snake_CurX, g_udtSnake(SNAKEONE)Snake_CurY) Then
Beep
MsgBox "您的蛇在移动中碰到了自己的身体,游戏失败!", 0 + 16, "BS贪食蛇"
MetmrSnakeMoveEnabled = False
MetmrGameTimeEnabled = False
MepicMoveAreaVisible = False
Exit Sub
End If
'判断蛇是否吃到了果子
If m_funEatPoint(g_udtSnake(SNAKEONE)Snake_CurX, g_udtSnake(SNAKEONE)Snake_CurY) Then
'累加玩家的得分并刷新得分显示
g_intPlayerScore = g_intPlayerScore + 1
MelblYourScoreCaption = g_intPlayerScore & "分"
Call m_subAddSnake '加长蛇的身体
Call m_subGetPoint '获取下一个果子的位置和颜色
Else
'绘制果子
lngPointX = g_udtPointPoint_X
lngPointY = g_udtPointPoint_Y
lngPointColor = g_udtPointPoint_Color
MepicMoveAreaPSet (lngPointX, lngPointY), lngPointColor
End If
End Sub
'该私有子过程用于初始化游戏
Private Sub m_subGameInitialize()
Erase g_udtSnake '清空蛇的结构数组
g_intPlayerScore = 0 '清空玩家的得分
g_lngGameTime = 0 '清空游戏耗费的秒数
g_intDirection = D_DOWN '设定蛇的初始运动方向为下
g_intSnakeLength = 4 '设定蛇的初始长度
ReDim g_udtSnake(1 To g_intSnakeLength) '重新定义蛇的长度
'定义蛇头部的数据
With g_udtSnake(SNAKEONE)
Snake_OldX = 530
Snake_OldY = 530
Snake_Color = vbBlack
End With
'定义蛇身第2节的数据
With g_udtSnake(SNAKETWO)
Snake_OldX = 530
Snake_OldY = 430
Snake_Color = vbGreen
End With
'定义蛇身第3节的数据
With g_udtSnake(SNAKETHREE)
Snake_OldX = 530
Snake_OldY = 330
Snake_Color = vbYellow
End With
'定义蛇身第4节的数据
With g_udtSnake(SNAKEFOUR)
Snake_OldX = 530
Snake_OldY = 230
Snake_Color = vbRed
End With
MepicMoveAreaVisible = True
MelblYourScoreCaption = g_intPlayerScore & "分"
MelblGameTimeCaption = g_lngGameTime & "秒"
MetmrSnakeMoveInterval = MehsbGameSpeedValue
MetmrSnakeMoveEnabled = True
MetmrGameTimeEnabled = True
Call m_subGetPoint '获取第一个果子的位置和颜色
End Sub
接下面的
定时器Timer启动后每次经过 delay 毫秒后,该 Timer 将激发一个其侦听器的 *** 作事件,即执行listener里面的actionPerformed{}代码。默认情况下,调用 stop 方法之前此循环将重复进行。如果希望计时器只激发一次,则调用该计时器上的 setRepeats(false)。而在上面所写的代码中,程序执行tstart()之后紧接着就是跳出对话框的代码,这样的话对话框就会即刻跳出,如果要达到楼主所说的效果,把JOptionPaneshowMessageDialog(null,"quit pprogram"); 放到actionPerformed{}里面即可。当然后面得有个延迟主程序的代码,否则main将一下子执行到最后,直接结束,也就等不到timer计时器的触发事件了。(试试:源程序不变,仅仅在actionPerformed里面添加一行:JOptionPaneshowMessageDialog(null,"timer!");)
以上就是关于蜂鸣器是怎么发声的如下代码,为什么不发声呢全部的内容,包括:蜂鸣器是怎么发声的如下代码,为什么不发声呢、请问台式机如何关闭pc beep、求用vbs编写的贪吃蛇源代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)